C++20引入了osyncstream(https://en.cppreference.com/w/cpp/io/basic_osyncstream)来同步线程对同一个流的写操作。但是为什么没有isyncstream来同步线程的阅读呢?这是否意味着读操作总是同步的呢?
谢谢
C++20引入了osyncstream(https://en.cppreference.com/w/cpp/io/basic_osyncstream)来同步线程对同一个流的写操作。但是为什么没有isyncstream来同步线程的阅读呢?这是否意味着读操作总是同步的呢?
谢谢
1条答案
按热度按时间nhjlsmyf1#
这可能是因为多个线程从单个流阅读没有任何意义。
假设你有一个消息序列被写入一个流,另一端有几个(比如说2个)读取器,假设每个消息都是1000字节长,其中20个消息被写入流。
现在,如果线程#1读取600字节,然后休眠,等待剩余的400字节到来,那么线程#2醒来,读取传入消息的剩余400字节,然后线程#1醒来,由于线程#2正在阅读而阻塞,当它醒来时,从next消息中读取另外400字节。
最后,线程#1读取了第一条消息的600个字节和第二条消息的400个字节,而线程#2读取了第一条消息的400个结束字节。它们将如何处理这些数据?这没有任何实际意义。