0

使用が許可されている唯一の同期プリミティブとしてセマフォを使用してカウントダウンラッチをプログラムする方法を誰か説明できますか? ありがとう。

4

1 に答える 1

1

カウントダウン ラッチを使用すると、現在のカウントがゼロになるまでラッチを待機できます。これは、ある量の作業が他のスレッドによって完了するまでスレッドを待機させることができることを意味します。

セマフォを使用すると、許可をタスクに割り当てることができます。パーミットを 10 個だけ使用できるようにしたい場合、パーミットを要求する 11 番目のタスクは、別のタスクがパーミットを返すまで待機する必要があります。

したがって、たとえば、許可が 1 つしかないセマフォを使用して、それをロックすることができます。これにより、メソッド/ブロックを同期するのと同じ動作になります。パーミットが返されると、別のスレッドがそれを取得して、ロックされたブロックに入ることができます。

 sem.acquire();

 doSomeStuff();

 sem.release();

セマフォが 1 つの許可のみで初期化されている場合は、次と同じです。

synchronized(someLock) {

  doSomeStuff();

}
于 2013-09-22T18:28:10.003 に答える