gpt4 book ai didi

Java锁定其他关键部分

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:19 24 4
gpt4 key购买 nike

我有一个静态方法,它将被多个线程访问,如下所示。我想做的是允许任意数量的线程执行 block 1,只要当前没有线程正在执行 block 2,反之亦然。基本上,一个 block 的执行锁定了另一个 block 而不是它本身。 ReentrantReadWriteLock 在某种程度上做了我想要的,因为我可以在 block 1 周围放置一个读锁,在 block 2 周围放置一个写锁,但它仍然受到限制,因为我不能让多个线程同时执行 block 2。有什么建议么?

public class SomeClass
{
...
public static void someMethod()
{
...
if(someCondition == true) //Begin block 1
{
doSomething();
} //End block 1

else if(someCondition == false) //Begin block 2
{
doSomething();
} //End block 2
...
}
...
}

最佳答案

听起来您需要创建自己的同步对象:它将具有以下方法:enterA()、leaveA()、enterB()、leaveB();它将有一个互斥体、一个条件变量和属性 aCount 和 bCount。

enterA:
lock mutex
wait on condition var until bCount is zero
increment aCount
unlock mutex

leaveA:
lock mutex
decrement aCount
notify condition var if aCount==0
unlock mutex

enterB() 和 leaveB() 类似,但会增加/减少 bCount,并等待 aCount==0。

关于Java锁定其他关键部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22772369/

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