C#:セマフォを用いた排他制御

排他制御の仕組みとして先日Mutexを取り上げました
今回は、同じく排他制御で使われるセマフォについて取り上げます。

セマフォがMutexと異なる点は、複数のプロセス・スレッドが資源を取得することができることです。
セマフォのコンストラクタで初期で解放する資源数や、解放できる資源の最大数を指定します。
WaitOne関数で資源取得待ちを行い、Release関数で資源解放を行います。Release関数の引数で資源解放数を指定することもできます。
(ただし、最大数を超える資源を開放するとSemaphoreFullExceptionとなるので注意が必要です)

セマフォは、同時に動くスレッド数を制限したいような重い処理がある時によく使われます。

以下は、セマフォを用いて同時に動くスレッド数を制限するサンプルです。

【サンプルコード】

・Controller.cs

・Processor.cs

【実行用バッチ】

・test.bat

【実行結果】

・test.bat

・Controller.exe

・Processor.exe


いかがでしたでしょうか?

排他制御の仕組みとしてMutexを説明したので、ついでに代表的な方法の一つであるセマフォについても説明しました。
Mutexよりも使用頻度は少ないと思いますが、同時に動くスレッド数を制限するための書き方があるというのは覚えておいて損はないと思います。

カテゴリーC#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA