如何在 Linux (C/C++) 中进行跨进程锁定?

如何在 Linux (C/C++) 中进行跨进程锁定?

我需要确保一个进程一次仅在一个实例中执行。在 Windows 上,您可以使用命名互斥体。但我不知道在 Linux 上用什么。

我想我已经看到了应用程序创建独占文件的方法,但我再也找不到它了。您使用常规文件函数、忙循环吗?

答案1

如果您只想运行应用程序的一个实例,则可以使用锁定文件。打开它带有O_CREAT|O_EXCL标志,如果文件已经存在,它将失败。

如果您想同步对文件的访问,请使用flock。也可以使用以下命令锁定部分文件fcntl。 Flock 仅用于建议性锁定,这意味着程序可以忽略锁定并无论如何访问它。强制锁定是可能的,fcntl但它需要特殊的安装选项和特殊的文件权限。

semgetsemop也可用于进程间同步。

答案2

进程间互斥体是 POSIX 的可选部分(请参阅unistd.h 上的 _POSIX_THREAD_PROCESS_SHARED页)并且由于它们是在 Linux 上实现的,因此您也可以使用它们 -查看示例

相关内容