gpt4 book ai didi

java - 用于暂停操作的信号量,不限制并发操作

转载 作者:行者123 更新时间:2023-11-29 03:07:35 25 4
gpt4 key购买 nike

我有一个方法,它会被许多在数据结构中查找数据的线程不断调用。

当需要更新该数据结构时,我需要阻止所有尝试查找的线程,直到更新完成。

我可以使用具有 X 许可的信号量,并让更新方法在执行更新之前获取所有 X 许可,然后再次释放它们 - 但现在 X 还用于将我的查找方法限制为 X 个同时调用的次要目的,我不想。

我还有哪些其他选项可以阻止对更新方法的调用而不限制它的同时执行?

最佳答案

研究使用 ReadWriteLock,特别是 ReentrantReadWriteLock .每个读取线程都可以锁定 readLock,当需要写入时,只需锁定 writeLock

写锁被持有时,将阻止所有读取(和后续写入)发生,直到写锁被释放。持有 readLock 的线程可以同时执行。即多个线程可以同时持有readLock。

如果您使用的是 Java 8,我会建议 StampedLock

关于java - 用于暂停操作的信号量,不限制并发操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299085/

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