如何使用C ++线程安全打开文件?

时间:2012-04-18 08:51:16

标签: multithreading file-io thread-safety

代码段:

ofstream log;
log.open("log.txt",ios::out);
Thread threads[2];
...both threads write to the file
log.close()

当一个线程写入文件时锁定文件的任何现有工具,因此两个线程不会同时写入。感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用pwrite(),在多线程中安全写入。

答案 1 :(得分:0)

正如shang所说, pwrite执行与write相同的操作,但写入文件中的指定位置而不修改文件指针,因此在线程中是安全的。

有关详细信息,请参阅man pwrite(2)。

 int fd = open('some_file',O_WRONLY);
 /* in threads */
 n = pwrite(fd, write_buffer, sizeof_buffer, file_offset);

在你的情况下,你可能必须在写入之前锁定并跟踪偏移量(你在文件中的位置)然后释放锁定以确保竞争条件不会覆盖现有部分文件和文件中的所有操作在并发域中都很好。