写入共享内存队列时出现隔离错误
Segfault on writing to a Shared Memory Queue
我使用 boost 托管共享内存在共享内存上创建了 boost deque。我有一个进程(进程 A)将数据推送到队列的后面,另一个进程(进程 B)从队列的前面读取并弹出前面。
我的进程 A 可以毫无问题地将数据推送到队列中。但是当我启动进程 B 时,它会在读取队列前面的那一刻出现段错误。进程 B 可以正确读取队列大小,只有当我从队列中读取或弹出元素时,它才会出现段错误。
进程 A 创建共享内存并构造队列对象。当我的进程 B 找到构造的对象时。
我的共享记忆队列是,
struct QueueType
{
boost::interprocess::interprocess_mutex mutex;
boost::interprocess::interprocess_condition signal;
boost::interprocess::deque < int > queue;
};
class ShmQueue
{
public:
ShmQueue ( std::string name )
: _shm_name ( name )
{
}
~ShmQueue ( )
{
Deinit();
}
bool Init ( bool value = false )
{
bool result ( false );
try
{
if ( value )
{
shared_memory_object::remove ( _shm_name.c_str() );
_shm_mem = managed_shared_memory ( create_only, _shm_name.c_str(), 65356 );
_queue = _shm_mem.construct < QueueType > ( "Queue" )();
}
else
{
_shm_mem = managed_shared_memory ( open_only, _shm_name.c_str() );
_queue = _shm_mem.find < QueueType > ( "Queue" ).first;
}
}
catch ( interprocess_exception &e )
{
std::cout << e.what() << std::endl;
_queue = NULL;
}
if ( _queue != NULL )
{
result = true;
}
return result;
}
bool Deinit ( )
{
bool result ( false );
_shm_mem.destroy < QueueType > ( "Queue" );
shared_memory_object::remove ( _shm_name.c_str() );
return result;
}
void Push ( int value )
{
scoped_lock < interprocess_mutex > lock ( _queue->mutex );
if ( _queue->queue.size ( ) < 20 )
{
_queue->queue.push_back ( value );
}
}
int Pop ( )
{
int result ( -1 );
scoped_lock < interprocess_mutex > lock ( _queue->mutex );
if ( !_queue->queue.empty( ) )
{
result = _queue->queue.front();
_queue->queue.pop_front();
}
return result;
}
private:
std::string _shm_name;
QueueType * _queue;
managed_shared_memory _shm_mem;
};
任何帮助都非常感谢,谢谢
如果您可以读取队列的大小,但不能读取其 ellements,那么该队列可能只是一个处理程序并将其 ellement 存储在其他地方。您确定boost::interprocess::deque < int > queue;
使用您的共享内存来分配其配置吗?
相关文章:
- 从矢量中删除元素后出现隔离错误
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 线程时访问静态映射时出现隔离错误
- 并行快速排序分区中的隔离错误
- C++多线程程序:变量定义为类成员的隔离错误
- TFLite 隔离错误,通过获取C++输入和输出
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- pthread_create中错误 4 的隔离错误
- 递归树遍历/分支删除的隔离错误
- 在类模板上使用 arm gcc 编译期间的隔离错误
- 从大量文件读取时出现隔离错误
- 在PHP扩展中使用emalloc从线程时出现隔离错误
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- 在QT中单击菜单时出现隔离错误
- 尝试访问标头声明成员时出现隔离错误
- 搜索链表时出现隔离错误
- 模板化子类析构函数中的隔离错误
- 插件中节点.js/Nan 回调C++不频繁的隔离错误
- 将行添加到 GTKTreeView 时的隔离错误
- 找不到命令时打开的隔离错误