【发布时间】:2010-11-11 17:45:57
【问题描述】:
我正在寻找在写入器偏向读取器/写入器模型中的两个(或多个)进程之间有效共享数据块的最佳方法。
我目前的测试是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
【问题讨论】:
-
我已将您的解决方案移至社区 wiki。
标签: c++ boost interprocess multiprocess