如何在程序之间建立互斥锁,在进程之间锁定互斥锁

时间:2013-04-27 16:37:01

标签: linux multiprocessing mutex

在远程主机中,我想运行3个程序A,B和C. 但我希望他们在不同的时间运行 所以如果A正在运行,B和C就无法运行

我的想法是在这些程序中创建一个互斥锁 像进程之间的互斥锁

最初的想法是创建一个互斥的东西 例如,当A运行时,它会锁定这些东西 所以B和C不能访问或写东西 然后B和C知道有一个程序正在运行,他们等到东西被解锁

这些东西可能是文件或其他东西

任何人都可以提出一些想法吗? 我希望我可以使用shell脚本,比如

 if file is unlocked; then
 lock file
./programA
 unlock file
 fi

感谢

2 个答案:

答案 0 :(得分:0)

您可以使用标准的pthread互斥锁,但是您需要使用pthread_mutexattr_setpshared()函数明确地将其属性初始化为“process-shared”。然后,您可以将互斥锁传递给共享内存中的其他进程。

答案 1 :(得分:0)

您使用锁文件的想法实际上是一种相当常见的习惯用法。它通常用于确保一次只运行一个程序副本。通常,文件的名称类似于~/.foo_lock~/foo/.lock,其中foo标识程序。

我不记得通常如何实现这一点的详细信息,但请尝试man flock作为起点。我无法回想起这个开源程序的名称。但是,我认为,gnucash将是一个这样的程序,以及许多邮件客户端。