1

Java の Synchronized キーワードは Mutex または Semaphore に依存していますか? これらの用語は両方とも同じ意味で使用されていると読みましたが、違いはありますか? Java に組み込みのセマフォ クラスはありますか?

4

3 に答える 3

1

mutexaと aの主な違いは、semaphoremutexそれを保持しているプロセス/スレッドによってのみ解放されるのに対し、 はsemaphore任意のプロセス/スレッドによって解放される可能性があることです。もう 1 つ違いがありますが、それほど重要ではありません。カウンティング セマフォと呼ばれる種類のセマフォがあります。つまり、複数の同時「ホルダー」を許可するように初期化できるセマフォがあります。

Java でのsynchronizedアクセスは、セマンティックに を使用して実装する必要がありますmutex

于 2012-10-12T21:14:15.660 に答える
0

セマフォには、コード ブロックの実行中に取得/解放できる固定数の許可があります。したがって、パーミットの数に等しい固定数のスレッドが、コード ブロックを同時に実行できます。Mutex/Lock は、許可の数が 1 であるセマフォの特殊なバージョンです。つまり、特定のコード ブロックを実行できるスレッドは 1 つだけです。これにより、スレッドにコード ブロックの「所有権」が与えられます。コード ブロックのロックを取得および解放できるのは、所有者だけです。

于 2012-10-13T14:37:57.757 に答える
0

同期はスレッドモニターの観点から実装されています

java.util.concurrent.locksは、 ReentrantLockなどの便利なロック関連クラスを含むパッケージです。

于 2012-10-12T21:14:49.343 に答える