我正在寻找在写入者偏向的读取器/写入器模型中在两个(或多个)进程之间有效共享数据块的最佳方法。
我目前的测试是boost::interprocess
. 我已经创建了一些managed_shared_memory
,并试图通过使用存储在共享内存中的进程间互斥锁来锁定对数据块的访问。
但是,即使在sharable_lock
reader 和upgradable_lock
writer 上使用,客户端也会在写入操作期间读取碎片值而不是阻塞。在单个进程中的线程之间进行类似的读取器/写入器设置时,我曾经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