LabVIEWの特徴について6(semaphore)

今回はSemaphoreについて御説明させて頂きます。

Semaphoreとはwikiの説明では以下のような記述となっていました。

セマフォsemaphore)とは、計算機科学において、並列プログラミング環境での複数の実行単位(主にプロセス)が共有する資源にアクセスするのを制御する際の、単純だが便利な抽象化を提供する変数または抽象データ型である。

・・・少し理解しにくい内容かもしれません。もう少し単純な例に言い換えると、「駅の自動改札機(リソース)に同時に複数人が通れなくする(同時に使えなくする)ために一人入る(リソースの占有)と一度扉が閉じて他の人が使えないようにし(ロック→鍵をかける)、入った人が通過すると扉を開けて次の人が入れるようにする(リリース→鍵を解放する)」ようなイメージです。駅の自動改札機は1台の場合もあれば複数台が並列に設置されている場合もあるため、一度に入れる人の数は自動改札機の数に依存します(リソースの数に依存する)。

これをLabVIEWの計測制御のワールドの例に変えると、「DAQカード、シリアル計測センサに対して、複数の処理が同時にアクセスすることができないように鍵を用意」して、「鍵を持っている処理だけがそのリソースを操作できる」ようにするための鍵の機能がSemaphoreと言うことができます。

上記の例をイメージした上で、LabVIEWに用意されたSemaphoreの処理用viのパレットを見てみましょう。viのアイコンがそのviの持つ機能を明示しています(LabVIEWの理解しやすさの一因ですね)。

基本的な使い方の流れとしては以下の通りとなります。

  1. 必要な処理の数分の鍵を用意する(Obtain)
  2. リソースを利用したい処理が鍵を要求し、鍵が届くのを待つ(Acquire)
  3. 鍵が余っていれば待ちを停止し(Acquireを抜ける)、リソースの利用を開始する
  4. リソースの使用が終了次第、鍵を返却する(Release)

実際の挙動を示した動画は以下のようになります。あくまでもSemaphoreは空いていれば相手を意識せずに処理は勝手に進行しますので、同期を目的とした処理ではない点に注意が必要だと思います。一度お試しください。