文件锁定与信号量

Bla*_*iev 8 c unix linux interprocess

出于好奇,在Linux上实现进程间同步的首选方法是什么?该sem*(2)系统调用的家人似乎有一个非常笨重,过时的接口,同时有三种方式来锁定文件- fcntl(),flock()lockf().

有什么内部差异(如果有的话)以及你如何证明每种差异的使用?

Jen*_*edt 9

都不是.pthread_*(例如phtread_mutex_t)的实际版本都允许将变量放在通过创建的共享段中shm_open.您只需要在init调用中添加一些额外的参数.

sem_t如果你不需要,不要使用信号量(),它们太低,并且被IO等中断.

不要滥用文件锁定进行进程间控制.它不是为此而做的.特别是,您无法刷新文件元数据(如锁定),因此您永远不会知道第二个进程何时可以看到锁定/解锁.


Duc*_*uck 5

正如DarkDust所说,您正在经历着丰富的历史中的众多选择。对于我的决策树来说,值得这样做的是:

一次只能访问一个进程/线程时,请使用互斥锁。

当两个或更多(但仍然有限)的进程/线程可以使用资源时,请使用信号量。

除非确实需要SYSV信号量,否则请使用POSIX信号量-例如UNDO,上次操作的PID等。

对文件使用文件锁定,或者如果以上内容在某种程度上不符合您的要求。