Java の Synchronized キーワードは Mutex または Semaphore に依存していますか? これらの用語は両方とも同じ意味で使用されていると読みましたが、違いはありますか? Java に組み込みのセマフォ クラスはありますか?
3 に答える
mutex
aと aの主な違いは、semaphore
はmutex
それを保持しているプロセス/スレッドによってのみ解放されるのに対し、 はsemaphore
任意のプロセス/スレッドによって解放される可能性があることです。もう 1 つ違いがありますが、それほど重要ではありません。カウンティング セマフォと呼ばれる種類のセマフォがあります。つまり、複数の同時「ホルダー」を許可するように初期化できるセマフォがあります。
Java でのsynchronized
アクセスは、セマンティックに を使用して実装する必要がありますmutex
。
セマフォには、コード ブロックの実行中に取得/解放できる固定数の許可があります。したがって、パーミットの数に等しい固定数のスレッドが、コード ブロックを同時に実行できます。Mutex/Lock は、許可の数が 1 であるセマフォの特殊なバージョンです。つまり、特定のコード ブロックを実行できるスレッドは 1 つだけです。これにより、スレッドにコード ブロックの「所有権」が与えられます。コード ブロックのロックを取得および解放できるのは、所有者だけです。
java.util.concurrent.locksは、 ReentrantLockなどの便利なロック関連クラスを含むパッケージです。