boost :: interprocess有'upgrade_to_unique_lock'吗?

我正在寻找在编写者偏见的读写器模型中有效地共享两个(或更多)进程之间的数据块的最佳方法。 我目前的测试是
boost::interprocess
。我创建了一些
managed_shared_memory
并尝试使用存储在共享内存中的进程间互斥锁来锁定对数据块的访问。 但是,即使在阅读器上使用
sharable_lock
而在写入器上使用
upgradable_lock
,客户端也会在写入操作期间读取碎片值而不是阻塞。在单个进程中在线程之间进行类似的读/写设置时,我用
upgrade_to_unique_lock
来解决这个问题。但是,我没有找到它的
boost::interprocess
等价物。有人存在吗? 服务器(作者):
while (1) {
  // Get upgrade lock on the mutex
  upgradable_lock <MutexType> lock(myMutex);

  // Need 'upgrade_to_unique_lock' here so shared readers will block until
  // write operation is finished.

  // Write values here
}
客户(读者)
while (1)
{
  // Get shared access
  sharable_lock <MutexType> lock(myMutex);

  // Read p1's data here -- occasionally invalid!
}
我想手头上的更大问题是:在编写器偏向的设置中,进程间互斥是一种访问进程之间共享内存的正确方法吗? 注意:使用Boost 1.44.0     
已邀请:
所有Boost.Interprocess可升级锁都支持升级。这里定义。 关于你更广泛的问题 - 我认为这正是你想要的。读者仍然可以同时工作,并且必须防止并发写入。除非您可以对共享内存进行分区以确保更多受限制的访问,否则这看起来是最好的。     
OP解决方案。 问题评论中所述的答案是使用成员函数
unlock_upgradable_and_lock
。如果有一个
boost::interprocess
模拟到
upgrade_to_unique_lock
,我不知道它在哪里。但是
writer()
功能可以改写为:
while (1) {
  // Get upgrade lock on the mutex
  myMutex.lock_upgradable();

  // Get exclusive access and block everyone else
  myMutex.unlock_upgradable_and_lock();

  // Write values here

  // Unlock the mutex (and stop blocking readers)
  myMutex.unlock();
}
    

要回复问题请先登录注册