解決策
セマフォは、共有(保護された)リソース上で同時に操作できるタスクの数を制限する方法です。保護されたリソースやコードの重要なセクションには、グローバル変数への書き込みや外部の機器との通信などがあります。コードをスレッドセーフにしたり、競合状態を防ぐためにセマフォを使用できます。セマフォは、他のプログラミング言語におけるミューテックス(相互排除オブジェクト)に似ています。
同時に呼び出されるべきではない2つ以上の重要なセクションコードを保護するのに役立ちます。クリティカルセクションに入る前に、スレッドはセマフォを取得する必要があります。まだクリティカルセクションにスレッドが存在しない場合、スレッドはダイアグラムの対象コードへすぐに入ります。クリティカルセクションが完成したら、このスレッドはセマフォを解放しなければなりません。クリティカルセクションに入りたい他のスレッドは、最初のスレッドがセマフォを解放するまで待たなければなりません。
これを行うには、セマフォを作成してから、各クリティカルセクションの最初にセマフォ取得VI、最後にセマフォ解放VIを配置します。その後、各サブVIは一度に1つずつセマフォを取得および解放して、適切なデータ制御を保証できるようにします。そして、セクションの最後でセマフォリファレンス解放VIを使用してサブVIを停止します。
セマフォ関数は、関数パレットのプログラミング>>同期>>セマフォサブパレットにあります。