gpt4 book ai didi

multithreading - 多个读者同步,单个作者?

转载 作者:行者123 更新时间:2023-12-03 15:03:14 25 4
gpt4 key购买 nike

另一个同步问题...我希望你们不要生气;)

假设以下场景:一个中心数据结构(非常大,所以我真的不想使其不可变并在发生更改时复制它。我什至不想在内存中保留多个副本),多个读取器线程以只读方式访问该数据结构,一个写入器线程在后台保持数据结构最新。

我目前同步对数据结构的所有访问,效​​果很好(没有同步效果,没有死锁)。我不喜欢这种方法的是,大多数时候我有很多读取器线程处于事件状态,而写入器线程只是偶尔处于事件状态。现在,读取器线程完全没有必要等待其他读取器线程完成。只要写入线程当前没有写入,他们就可以轻松地并行访问数据结构。

有没有一种好的、优雅的方法来解决这种情况?

编辑:非常感谢您的回答和链接!让我添加另一个简短且相关的问题:如果在读者的关键部分中执行的代码只需要很短的时间(就像哈希表查找),是否值得考虑实现您描述的技术之一或者是序列化这种情况下锁的效果还不错吧?可扩展性和性能非常重要。你觉得怎么样?

编辑2:我刚刚研究了单个写入器/多个读取器锁的一种实现,该实现使用监视器来同步WaitToRead方法中的一些代码。这是否会导致我一开始想要避免的序列化效果? (仍然假设要同步的代码短且快)

最佳答案

RTL(sysutils) 中有一个用于此目的的类:TMultiReadExclusiveWriteSynchroniser

它非常容易使用。您不需要严格对线程进行分类,例如读者或作者。只需在线程中调用“BeginRead”或“BeginWrite”即可启动线程安全操作。调用“EndRead”或“EndWrite”完成操作。

关于multithreading - 多个读者同步,单个作者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618164/

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