実行中の 2 つのメイン スレッド A と B と、非同期に呼び出される 1 つのスレッド T があるとします。スレッド T でメッセージ aMsg を受信するまでスレッド A を待機させ、スレッド T でメッセージ msgB を受信するまでスレッド B を停止させたいとします。 2つのセンパフォアでこれを行う方法を知っています:
sempahoreA = new Sempahore(0);
sempahoreB = new Sempahore(0);
//in thread A
//code until where to run
semaphoreA.acquire()
//in thread B
//code until where to run
semaphoreB.acquire()
//in thread T
if (msgA.equals(msgRecevied)) {
semaphoreA.release()
}
if (msgB.equals(msgReceived)) {
semaphoreB.release()
}
問題は、複数の A、B、C、... スレッドがあり、複数のセマフォを使用したくないことです。java.util.concurrent
すべてのセマフォを 1 つのインスタンスだけに置き換えることができるクラスはどこかにありますか?
synchronizer = //?
//in thread A
//code until where to run
synchronizer.acquire(msgA)//only let go if msgA is received from thread calling release
//in thread B
//code until where to run
synchronizer.acquire(msgB)//only let go if msgA is received from thread calling release
//in thread T
if (msgA.equals(msgRecevied)) {
synchronizer.release(msgA)
}
if (msgB.equals(msgReceived)) {
synchronizer.release(msgB)
}//actually here you can call synchronizer.release(msgReceived)