我有一个多线程C++应用程序,它在内存中包含一个复杂的数据结构(缓存数据)。
在我刚读到数据的时候一切都很好。我可以拥有任意多的线程来访问数据。
然而,缓存的结构不是静态的。
“伪码”:
function getItem(key)
lockMutex()
foundItem = walkTreeToFindItem(key)
copyItem(foundItem, safeCopy)
unlockMutex()
return safeCopy
end function
function garbageCollection()
while item = nextItemInTree
if (tooOld) then
lockMutex()
deleteItem(item)
unlockMutex()
end if
end while
end function困扰我的是:这意味着,我在阅读时必须锁定树(以避免垃圾收集在我阅读时开始)。然而,作为一个副作用,我也不能在同一时间有两个阅读过程了。
有什么建议吗?
是否有某种“这是一个只与写发生冲突的只读操作”Mutex?
发布于 2009-10-21 16:26:13
调查读写锁。
您没有指定可以使用哪个框架,但是pThread和助推都实现了该模式。
发布于 2009-10-21 16:32:35
正如其他人所说,这个概念是“共享的读者,单一的作者”锁。在Linux环境中,您应该能够在没有任何框架的情况下使用pthread_rwlock_t。我建议也研究一下boost::shared_lock。
发布于 2009-10-21 16:26:40
我建议使用读写器锁。其思想是您可以获得一个用于“阅读”或“写作”的锁,并且该锁将允许多个读取器,但只允许一个作者。非常方便。
https://stackoverflow.com/questions/1601943
复制相似问题