使用Linux阅读可以避免"unavailability of data for reading written by a different thread"吗?



请假设如下场景(OS = Redhat Linux),

选择:

写线程:使用FD=1写入文件。设置std::atomic变量。

编辑更清楚:写完成使用写C函数调用。https://www.man7.org/linux/man-pages/man2/write.2.html

读线程:使用不同的FD读取上面的文件=2在上面的值保存std::atomic变量。

那么我假定有可能,上面的读线程NOT能够读取由写入线程写入的所有数据(例如,FD=2的read调用可以返回较少的字节数)。因为可以在FD级别进行缓冲。

======================================================================================

选项B:

写线程:使用FD=1写入文件。设置std::atomic变量。

编辑更清晰:只追加完成(不覆盖)发生)。写完成使用写C函数调用。https://www.man7.org/linux/man-pages/man2/write.2.html

读线程:读取(使用读取))上面的文件使用相同的FD=1在上面的值保存std::atomic变量。

https://man7.org/linux/man-pages/man2/pwrite.2.html

现在,是否保证所有的数据写入线程被读取

缓冲处于libc级别,在将数据交给内核之前保留数据。pread是一个系统调用,它只会给你已经显示给内核的数据。

所以没有。pread为您节省了额外的seek+read调用,它不解决任何缓冲问题。

你如何确保内核能够看到你的数据?您没有显示您的编写器代码,但通常调用fflush应该做到这一点。

最新更新