複数のスレッドの小さなプログラムを作成しており、セマフォを使用して相互排除を強制しています。しかし、問題が頭に浮かびます。
Semaphore.release
が前に呼び出された場合はどうなりSemaphore.acquire
ますか?
私のはうまくいきます。それは悪い習慣ですか、それとも大丈夫ですか?
複数のスレッドの小さなプログラムを作成しており、セマフォを使用して相互排除を強制しています。しかし、問題が頭に浮かびます。
Semaphore.release
が前に呼び出された場合はどうなりSemaphore.acquire
ますか?
私のはうまくいきます。それは悪い習慣ですか、それとも大丈夫ですか?
モニターの原則について話していると思います。これは、多くのスレッドまたはプロセスで共有されるメモリ上のデータにアクセスする際のデッドロックを回避するために使用されます。
その場合は、Java の同期ブロックについてお知らせください。これにより、メソッド本体で同期ブロックを保持しているスレッドと同時に、他のスレッドがこのオブジェクトにアクセスできないようになります。同期ブロックにいる間に他の人がこのデータにアクセスしたい場合、他の人は現在のワーカースレッドが関連するオブジェクト/データでこの状態を離れるまで待つ必要があります。