我有10个进程的运行,每个编写相同文件。我不想多个作家,那么基本上我正在寻找一个互斥/二进制信号来保护文件写道。问题是我不能分享信号灯之间的10个进程,所以我在寻找使用共享存储器之间的10个进程,把信的内部共享存储器,所以它可以访问的每个过程。

任何人都可以点上我的文档,这在C/C++对于Unix?样本代码使用这种结构将是巨大的。

感谢

有帮助吗?

解决方案

听起来你最好不要使用 flock(2)

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

其他提示

把一个信号在共享存储器不是最好的解决这个问题(如果它甚至会的工作,在所有)。你应该调查的文件锁,这是一个UNIX功能专门设计用于提供独特性之间的文件作家。

具体地说,检查出:

为更多的解释材料,请参阅 高级的程序在UNIX环境,第14.3

查看 UNIX Network Programming Vol。 2 由W. Richard Stevens撰写。

这是一本关于这个主题的最好的书。

您可以使用PTHREAD互斥锁。在启动互斥锁时,您需要使用 pthread_mutexattr_setpshared 功能来制作互斥锁跨进程共享,然后将其放入共享内存中。所有进程都可以附加到共享内存,然后访问互斥锁。

您还可以根据锁定要求(递归等)向SHM添加其他属性

如何使用UNIX IPC创建共享队列。一个进程读取队列并写入文件,所有其他进程将数据推入队列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top