Мой класс является одноэлементным, и есть два метода A и B, которые требуют некоторого контроля доступа со следующими условиями:
- Вызов метода A всегда разрешен
- Вызов метода Bпока поток выполняет метод B, он должен ждать
- вызов метода B, когда поток выполняет метод A, должен ждать
- когда поток, вызывающий метод B, ожидает, пока поток завершит метод A, нужно только дождаться завершения этого потока, а не последующих вызовов
например
T1->A(.....) T1 call A
T2->B~~~~~~() T2 has to wait for T1 only to finish A, no need to wait for T3 nor T5
T3->A(.) T3 can call A
T4->B~~~~~~() T4 has to wait for T1, T2 and T3, no need to wait for T5
T5->A(........) T5 can call A
T6->B~~~~~~~() T6 has to wait for T2, T4 and T5
У меня есть следующий псевдокод:
public void A() {
i++;
.....
condition(i).signalAll();
}
public void B() {
int iLocal = i;
for all condition(i) <= iLocal, await
lockB.lock()
...
lockB.unlock();
}
Iя думаю, что использование условия может быть в состоянии достичь того, что я описал выше?Или есть другие лучшие способы добиться того же?