为什么C++ 20不引入同步流

zdwk9cvp  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(126)

C++20引入了osyncstream(https://en.cppreference.com/w/cpp/io/basic_osyncstream)来同步线程对同一个流的写操作。但是为什么没有isyncstream来同步线程的阅读呢?这是否意味着读操作总是同步的呢?
谢谢

nhjlsmyf

nhjlsmyf1#

这可能是因为多个线程从单个流阅读没有任何意义。
假设你有一个消息序列被写入一个流,另一端有几个(比如说2个)读取器,假设每个消息都是1000字节长,其中20个消息被写入流。
现在,如果线程#1读取600字节,然后休眠,等待剩余的400字节到来,那么线程#2醒来,读取传入消息的剩余400字节,然后线程#1醒来,由于线程#2正在阅读而阻塞,当它醒来时,从next消息中读取另外400字节。
最后,线程#1读取了第一条消息的600个字节和第二条消息的400个字节,而线程#2读取了第一条消息的400个结束字节。它们将如何处理这些数据?这没有任何实际意义。

相关问题