Boost修复了\u管理\u共享\u内存挂起

Boost修复了\u管理\u共享\u内存挂起,boost,centos,shared-memory,semaphore,boost-interprocess,Boost,Centos,Shared Memory,Semaphore,Boost Interprocess,我试图使用boost进程间信号量和共享内存来完成一项相对简单的任务。我想固定两个进程之间共享的数据缓冲区,其中第一个进程是生产者,第二个进程是消费者。缓冲器将由3部分组成。第一部分是boost::interprocess::semaphore,用于协调生产者/消费者。第二部分将只是一个整数,因此消费者知道缓冲区中有多少项。第三部分是项目的实际数组。我已经开始了一个非常基本的实现,但是当试图访问或打开共享内存时,进程会挂起,我不知道为什么。我是在64位Centos 6.5和gcc/g++4.8.2

我试图使用boost进程间信号量和共享内存来完成一项相对简单的任务。我想固定两个进程之间共享的数据缓冲区,其中第一个进程是生产者,第二个进程是消费者。缓冲器将由3部分组成。第一部分是boost::interprocess::semaphore,用于协调生产者/消费者。第二部分将只是一个整数,因此消费者知道缓冲区中有多少项。第三部分是项目的实际数组。我已经开始了一个非常基本的实现,但是当试图访问或打开共享内存时,进程会挂起,我不知道为什么。我是在64位Centos 6.5和gcc/g++4.8.2上完成这项工作的。我还应该注意,这台机器有两个CPU,使用进程关联性,我可以确保生产者和消费者都在单独的CPU上运行


代码位于。我遇到以下问题;在代码保持原样的情况下,使用者和生产者都挂起在第3行(固定的\u管理的\u共享的\u内存shm(仅限open_,“SharedMem”))。如果我将该行注释掉,那么这两行都会在第26行(信号量上的post/wait)终止(但是没有发现错误)。这让我觉得不知何故内存没有被共享,b/c当我打印出地址时,它们似乎是正确形成的(比如偏移量似乎是正确的),并且它们在进程之间正确地传递。在如何正确设置这一点上,我有什么遗漏吗?

什么是不爱的?C风格的强制类型转换执行
重新解释\u强制类型转换
,字符串类型的void*传递(
std::string semaphoreADR
,是的,先生),
system()
调用,不同步的注释,显式的析构函数调用,一堵散文“问题”的大墙,外部代码链接与不可编译顺序的不完整代码?[哦,我忘了40%的行上的原始指针算法和两个缺失的变量。]如果你想把所有的东西都当作C,你用boost做什么
mmap
看起来更自然。我使用的是boost,只是我熟悉的b/c;我不知道mmap。很抱歉,如果一些代码不完整或缺少一些变量,我正试图去掉一些多余的绒毛。我希望在固定管理共享内存方面,我缺少一些简单的东西,一些我忘记初始化的东西会导致它挂起。如果您愿意的话,我可以去掉所有其余的代码,这样它就可以专注于这个问题了?我们总是喜欢这样。总的来说,我觉得如果你真的使用了boost(完全),你的代码会小4倍,容易出错的几率会小10倍;我只是不知道如何使用boost让它共享完全相同的内存,所以我求助于指针算法和荒谬的程序参数。。。如果您知道如何使用boost共享相同的内存空间,请共享。