具有多个对象/锁的Java同步

我想知道是否有一个包或模型可以帮我解决这个问题.

假设我有3个线程和一堆对象A,B,C,D,E,F

> T1需要锁A,B
> T2需要锁B,C,D
> T3需要锁E,F

在这种情况下,如果T1& T3同时运行.此外,T2& T3可以同时运行.但是T1& T2不应该同时运行.

另外,请注意

>线程可以获得任意数量的锁,而不仅仅是2.(我看到了一个优雅的解决方案,固定数量的锁,但不确定我可以在这里应用它.)
>显然,我希望每个线程同时获取所有需要的锁以防止死锁.

如果有人可以指向我支持此用例的程序包,或者解决此问题的一些代码片段,请告诉我.

非常感谢.

解决方法:

步骤1

为您的资源提供自然的顺序.例如,如果您的资源是字母,A将出现在B之前,B将出现在C之前,依此类推.

第2步

只允许您的线程按顺序获取资源.

现在你的线程在任何情况下都不可能达到死锁.

>线程1需要锁定资源A,B,D和E.
>线程2需要锁定资源B和E.

我们的线程必须争取资源B和D的锁定.因为我们已经强制执行自然顺序,所以首先获得B上的锁定的线程保证在D上获得锁定并顺利进行.失败的线程将等待B被释放.

上一篇:c – 这些Boost :: Interprocess组件是否需要同步?


下一篇:使用c,linux中的信号进行进程间同步