gpt4 book ai didi

c++ - 只写互斥锁

转载 作者:太空狗 更新时间:2023-10-29 23:25:14 25 4
gpt4 key购买 nike

我有一个多线程 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

困扰我的是什么:这意味着我必须在阅读时锁定树(以避免在阅读时启动垃圾收集)。但是 - 作为副作用 - 我也不能再同时进行两个阅读过程。

有什么建议吗?

是否存在某种“这是只与写入冲突的只读操作”互斥体?

最佳答案

查看read-write-lock .

您没有指定可以使用哪个框架,但都指定了 pThreadboost已经实现了该模式。

关于c++ - 只写互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com