并发编程 - 是否有必要手动锁定多个进程将访问的文件?

时间:2015-06-03 15:53:49

标签: c concurrency process fork

我知道pthreads,如果他们正在修改相同的变量或文件,你可以使用pthread_mutex_lock来防止同时写入。

如果我使用fork()来创建多个正在编辑同一文件的进程,我该如何确保他们不会同时写入该文件?

理想情况下,我希望一次锁定一个编写器的文件,每个进程只需要编写一次(不需要循环)。我需要手动执行此操作还是UNIX会为我执行此操作?

1 个答案:

答案 0 :(得分:3)

简短回答:你必须手动完成。每次写入的原子性都有一定的保证,但是你仍然需要同步进程以避免交错写入。有许多同步过程的技术。由于您的所有编写者都是常见进程的后代,因此最简单的方法是在公共管道上传递令牌。在fork之前,创建一个管道并在其中写入一个字节。只要进程想要写入文件,它就会对管道进行阻塞读取。如果它获得一个字节,则继续写入该文件。完成后,它会将一个字节写回管道。如果任何其他进程想要访问该文件,它将阻塞管道读取,直到另一个进程完成写入。这通常比使用信号量更简单,这是另一种很好的技术。