ながれです。
今回は、非同期処理を並行して実行させたくない場合についてお話します。
例えば、処理Aと処理Bは非同期で動く処理だとします。
しかし、処理Aが動いている間は処理Bを動かしたくない場合ですね。
そんな時に使えるのが「セマフォ」と呼ばれる仕組みです。
ではそもそもセマフォとは何か?お話していきます!
「セマフォとは?」
排他制御のための仕組みで、同時に幾つの処理が動けるか制御できます。
ある資源が何個使用可能かを示す記録のことです -Wikipediaより
例えば、先ほどと同様に処理Aと処理Bは非同期で動くもので、同時には動かしたくない処理だとします。
また、セマフォの資源使用可能数を1だとします。
処理Aの頭でセマフォロックをすると、セマフォの資源使用可能数は0個となり、処理Aが動いている間は処理Bは待機状態となります。
処理Aが処理完了すると、処理Bが動き出します。

セマフォの資源使用可能数を2とすれば、同時に動く処理は2つまで。
3つ目はイベントが発生してても、待機状態になります。
【Web開発初心者向け!】Web開発入門完全攻略 充実の18時間コース
どうやって使うの?
環境ごとに使い方は少し異なります。
Windows
Win32 APIでは、CreateSemaphore関数とReleaseSemaphore関数を使う。
.NET Framework
.NET Framework 2.0以降では、System.Threading.Semaphore クラスを使う。
バージョン1.1以前では自作するかWin32 APIを呼び出す必要がある。
.NET Framework 4.0以降では、軽量化されたSystem.Threading.SemaphoreSlim クラスを利用できる。
Java
Javaでは、java.util.concurrent.Semaphore クラスを使う。
Java 5以降で使用可能である。
Perl
Perlでは、Thread::Semaphore モジュールや、新しくCoro::Semaphore モジュールなどを使う。
Python
Pythonでは、threadingモジュール中にSemaphore クラスが用意されている。
以上Wikipediaより。
終わりに
本記事では、「処理Aが動いているときに、処理Bは動いて欲しくないんだけど、同期処理にはできないからなぁ…」とお悩みの方に向けた記事となりました。
そんなとき、「セマフォ」があるよというのを覚えておいていただけると幸いです。
フロントエンドエンジニアになりたい人の Webプログラミング入門
以上となります。