Mutexコンポーネントとは、ロックをかけて実行スレッドを排他制御するコンポーネントです。以前からあるコンポーネントですが、今回のバージョンアップにより、複数のフローの実行順が制御されるようになりました。
ちょっと難しそうな話ですが、実際に試してみればすぐにわかります。
1.フローの作成
このフローはFilePutコンポーネントでファイルへテキストを書き込みます。書き込むテキストの内容はマッパーで設定します。
ファイルに書き込む前にMutexコンポーネントでロックをかけます。Mutexのロックは、ファイルに書き込んだ後フローが終了する時に自動的に解除されます。また、テストをしやすくするためにSleepコンポーネントで5秒スリープするようにします。
2.複数のフローによるMutexロックの競合
上記のフローをコピーして4つのフローを作ります。マッパーのところのテキストを「春はあけぼの。」、「夏は夜。」、「秋は夕暮れ。」、「冬はつとめて。」に設定します。それ以外は変更する必要はありません。
これで、同じIDのロックと同じ出力先を持っているフローの用意は完了です。
4つのフローをほぼ同時に実行したら、ロックの競合が発生し、待機状態のフローのロック獲得順によってファイルの出力結果が変わります。
以前のバージョンでは待機状態のフローのロック獲得順は不定となっていたので、ファイルの出力結果は予想できませんでした。今回のバージョンアップにより待機状態のフローのロック獲得順はFIFO(先入れ先だし)となるので、フローの実行順の通りにファイルに結果が出力されます。
3.テストの実行と確認
それでは4つのフローを「春夏秋冬」の順番ですばやく実行してみましょう。
すべてのフローの実行が終わったら結果ファイルを確認します。ファイルの中身は次のようになっているはずです:
「春はあけぼの。夏は夜。秋は夕暮れ。冬はつとめて。」
4つのフローをすばやく実行するのは難しいかもしれませんので、テスト用のプロジェクトを添付しました。このプロジェクトをテストユーザーのホームフォルダーにコピーして、フローデザイナーでプロジェクトの中のRunAllというフローを実行してください。実行した後1分ぐらいを待って、出力ファイルの中身を確認してください。
Mutexコンポーネントの動作変更はそれほど大きな変更ではありませんが、実行順が保証されることで嬉しく思う方もいらっしゃるのではないでしょうか。