ReentrantReadWriteLock有限制吗?我现在正在测试我的应用程序,当我在20个线程时,我的写锁似乎不再释放锁(返回true:tryLock())。
发布于 2014-04-25 05:10:01
限制是65535个锁,所以看起来你不太可能在20个线程中达到它。(虽然有可能,但这一限制确实计入了重新进入的收购。但是,违反它会导致抛出错误,而不是从tryLock()返回false返回值。)
更有可能的情况是,当您尝试tryLock()时,系统已经足够繁忙,不太可能出现锁可用的情况。您可能应该切换到使用合理的超时阻塞的调用,以便线程等待,直到其他调用完成,锁变为可用。
发布于 2014-04-25 05:07:42
当我有20个线程时,使用
(返回真: tryLock())。
除非您有20个CPU,否则这些线程不会同时运行,并且正在运行的线程很可能会将未运行的线程排除在外。如果您需要避免这种情况,则必须使用公平锁。
一个更好的解决方案是不要在任何锁上都存在严重争用的地方编写代码。
https://stackoverflow.com/questions/23279744
复制相似问题