C ++中是否有用于创建独特流程的跨平台解决方案?

时间:2011-08-31 09:45:55

标签: c++ cross-platform

我需要在多个平台上使我的程序只有一个进程。我知道它可以在Windows上使用互斥锁来解决,但我不知道其他平台如何像Linux一样。 Mutex不是C ++ 03标准的一部分,尽管它是C ++ 0x标准。在编译器支持C ++ 0x之前,我必须等待很长时间。可以使用boost的互斥量吗?

提前致谢:)

3 个答案:

答案 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来确保我的程序中只有一个实例正在运行。