【发布时间】:2012-10-31 15:15:26
【问题描述】:
我有一个 Linux 程序,它产生多个进程(fork)并通过 POSIX 共享内存进行通信。我想让每个进程分配一个 id (0-255)。我的意图是在共享内存区域(初始化为零)中放置一个位向量,然后原子地比较和交换位以分配一个 id。
有没有对 c++11 友好的方法来做到这一点?我可以创建一个原子位集吗?我可以跨进程使用互斥锁吗?如何确保构造函数在所有进程中被调用一次且仅调用一次?
【问题讨论】:
-
@aleguna 因为我想要一个 0-255 之间的值,当一个进程离开这个程序时,它应该释放它的 ID 以供重用。
-
@NicolBolas 我提出了我的问题并选择了最少的必要信息来提出一个可以让我解决问题的问题。我不是在寻找人们来改变问题所在。我可以创建一个任意同步问题,并就跨进程的 posix 共享内存询问它,问题仍然存在。如果对您有帮助,请假装我询问了共享数据结构以及 c++ 互斥体或原子如何在这方面发挥作用。
-
@dschatz:因此,你有一个classic XY question.
-
@NicolBolas 根据您的第一个问题,您显然错过了重点。我一般在问 c++11 互斥体和原子如何跨进程工作(嘿,标题匹配!)。我举一个具体的例子来具体说明。然后,您继续对示例进行挑剔。如果你没有答案,那很好,但没有理由试图移动球门柱来回答我的问题。
-
C++11 没有进程间函数。 Boost::Interprocess 可能为您提供了一些工具来解决这个问题。