共享内存信号量

问题描述:

我有10个进程正在运行,每个进程都写入同一个文件。我不想要多个编写器,所以基本上我正在寻找一个互斥/二进制信号量来保护文件写入。问题是我无法在10个进程中共享信号量,所以我正在寻找10个进程之间使用共享内存的方法,并将信号量放入共享内存中,以便每个进程都可以访问它。共享内存信号量

任何人都可以指向我的文档在这个在C/C++的Unix?使用这种结构的示例代码会很好。

谢谢

+0

@rsinha为什么你不能过程之间使用信号灯? AFAIK进程只需要知道信号量标识符就可以处理它 – 2009-11-16 21:06:20

这听起来像你会关闭使用flock(2)更好:

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

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

看看W. Richard Stevens的UNIX Network Programming Vol. 2

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

把共享内存,信号量是不是解决这个问题的最佳解决方案(如果它甚至会在所有的工作)。您应该调查文件锁定,这是一种UNIX功能,专门用于在文件编写者之间提供排他性。

具体来说,请上网:

详细说明材料,见Advanced Programming in the UNIX Environment, section 14.3

你可以使用PTHREAD互斥。在初始化一个互斥量的时候,你需要使用pthread_mutexattr_setpshared函数来让互斥量在进程间共享,然后把它放在一个共享内存中。所有进程都可以连接到共享内存,然后访问互斥锁。

此外,你可以根据你的需要锁定的SHM添加附加属性(递归等,)