我需要在多个平台上使我的程序只有一个进程。我知道它可以在Windows上使用互斥锁来解决,但我不知道其他平台如何像Linux一样。 Mutex不是C ++ 03标准的一部分,尽管它是C ++ 0x标准。在编译器支持C ++ 0x之前,我必须等待很长时间。可以使用boost的互斥量吗?
提前致谢:)
答案 0 :(得分:4)
std :: mutex和boost :: mutex都没有公开实现此功能所需的Win32互斥体的功能,即系统全局命名的互斥锁,所以不,你不能使用它们中的任何一个。
最简单,最便携的方法可能就是简单地创建一个锁文件(你可以写一个PID,然后检查进程是否仍然存在,以避免在异常终止后锁定程序)。但是,您仍然可能需要一些特定于平台的粘合代码。
答案 1 :(得分:3)
我不相信这可以通过boost :: mutex完成,但您可以使用Boost Interprocess library实现所需的效果。
答案 2 :(得分:3)
看一下boost的进程间库:http://www.boost.org/doc/libs/1_47_0/doc/html/interprocess.html
我使用了named_mutex http://www.boost.org/doc/libs/1_47_0/doc/html/boost/interprocess/named_mutex.html来确保我的程序中只有一个实例正在运行。