gpt4 book ai didi

c++ - 使用Linux pread可以避免 “unavailability of data for reading written by a different thread”吗?

转载 作者:行者123 更新时间:2023-12-03 13:01:58 25 4
gpt4 key购买 nike

请假设以下情况(OS = Redhat Linux),
选项A :
编写器线程:使用FD = 1写入文件。在std::atomic 变量中设置最后写入的位置和大小。
编辑更清晰:使用write C函数调用完成写操作。
https://www.man7.org/linux/man-pages/man2/write.2.html
阅读器线程:使用另存于std::atomic 变量中的 FD = 2读取上述文件。
然后 我假设可能是,在读取线程 之上而不是能够读取写入器线程写入的所有数据(即FD = 2的读取调用可以返回较少的字节数)。由于在FD级别可能存在缓冲。
================================================== ===================================
选项B:
编写器线程:使用FD = 1写入文件。在std::atomic 变量中设置最后写入的位置和大小。
编辑更清晰:仅完成附加操作( 不会覆盖)。使用write C函数调用完成写入。
https://www.man7.org/linux/man-pages/man2/write.2.html
读者线程:使用 相同的FD = 1读取(使用 pread )在文件上方,并保存在上述std::atomic 变量中。
https://man7.org/linux/man-pages/man2/pwrite.2.html
现在,是否可以保证Reader线程读取writer线程写入的所有数据

最佳答案

缓冲处于libc级别,将数据保留在移交给内核之前。 pread是一个系统调用,它只会为您提供已经显示给内核的数据。
所以不行。 pread为您节省了寻求+读取的额外调用,它不能解决任何缓冲问题。
您如何确保内核可以看到您的数据?您尚未显示编写者代码,但通常应调用fflush来完成。

关于c++ - 使用Linux pread可以避免 “unavailability of data for reading written by a different thread”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66205010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com