私は現在、ちょっとした宿題で立ち往生していて、誰か助けてくれるかどうか疑問に思っていました -
Javaでセマフォを使用して、2つのスレッドからの文字の印刷を同期する必要があります.1つは「A」を印刷し、もう1つは「B」を印刷します。同じ文字を 2 つ以上続けて出力することはできないため、出力は次のようになります。
アーバババババババババアババババ
現時点では、3 つのセマフォ、1 に設定されたバイナリ ミューテックス、カウント セマフォがあり、スレッド クラスは次のようになります。
public void run() {
while (true) {
Time.delay(RandomGenerator.integer(0,20));
Semaphores.mutex.down ();
System.out.println (produce());
if (printCount > 1)
{ printCount = 0;
Semaphores.mutex.up ();
Semaphores.printB.up();
}
}
}
public String produce() {
printCount++;
return "A";
}
public void run() {
while (true) {
Time.delay(RandomGenerator.integer(0,20));
Semaphores.mutex.down ();
System.out.println (produce());
if (printCount > 1)
{ printCount = 0;
Semaphores.mutex.up ();
Semaphores.printA.up();
}
}
}
public String produce() {
printCount++;
return "B";
}
それでも、私が試してみても、デッドロックするか、せいぜい2行だけを印刷しているように見えますが、常に3行を時々印刷しているようです!
可能であれば、コードやほんの数個のポインターを探すのではなく、どんな助けも大歓迎です:)