fopen / fwrite和多线程?

时间:2012-12-07 14:04:19

标签: c++ multithreading file fopen

fopen / fwrite和多线程?

某些多线程程序打开同一个文件,每个线程都会创建一个指向该文件的文件指针。

由一个特定程序创建的一个线程将在某个随机时间更新文件,而由其他程序创建的其他线程将只读取该文件的内容。

如果写入线程更改文件中的内容而其他线程尝试读取内容,我猜这会产生竞争/数据不一致问题。

这里的问题是更新文件的线程应编译成与创建读取文件内容的线程的程序不同的exe程序,因此程序内级别的线程控制变得不可能。

我的解决方案是在硬盘上创建一个非常小的“标志”文件,以指示该文件的状态:

1)写作线程正在更新文件的内容;

2)阅读线程正在读取文件的内容;

3)1)或2);

使用此标志文件在必要时阻止线程。

这个问题是否有更紧凑/整洁的解决方案?

1 个答案:

答案 0 :(得分:0)

使用所有进程都知道的进程全局“命名”信号量可能更容易。另外,你可以使用线程/进程阻塞信号量机制而不是文件打开关闭和文件内容的自旋循环......