20 |
BSVの例題 (2) |
食事する哲学者全員が左手→右手の順にスプーンを取るシミュレーションです。当然ですが全員左手にスプーン持った状態でデッドロックします。
ソースを修正し、2番目の哲学者のみ右手→左手の順のシミュレーションです。この場合はランダム的に全員が食事することができます。
spoon0とテストベンチは親子モジュールとなっており、その間にpickupとputdownのEN-RDYインタフェースが自動生成されます。まずspoon0にpickup指示を出すと、RDYが落ちます(=busy)。同時にspoon0のinuseがTrueとなり使用中を示します。哲学者の食事が終了するとputdown指示がされ、inuseはFalseになります。
スプーンを取得する場合は当然使用中で無いことを確認してから取得するコードとなっていますが、一方、スプーンをリリースする場合は、直前まで自分が使用していることはシーケンスから明らかなため特に使用中であることは確認していません。