ヽ(´・肉・`)ノログ

How do we fighting without fighting?

すごいE本をElixirでやる(49)

第15章 レイジ・アゲインスト・ザ・有限ステート・マシーン - 15.3 取引システムの仕様 - 状態ダイアグラムと遷移の定義 から

両方のFSMがidle,idle_waitを経てnegotiate状態になるところまで進んだので,そこから続き.

第15章 レイジ・アゲインスト・ザ・有限ステート・マシーン

15.3 取引システムの仕様

状態ダイアグラムと遷移の定義

あなたのFSMがメッセージacceptedをJimのFSMへ送るか, あなたのFSMがメッセージacceptedををJimのFSMから受け取ると, あなたのFSMはnegotiate状態になる.

negotiate状態になったときにできることは2つ.

  1. アイテムを提案(offer)する
  2. 提案を撤回(retract)する

どちらも,ユーザー(あなた/Jim)がFSMへメッセージを送り,FSMは受け取ったメッセージをそのまま相手のFSMへ送る.

offer/retractメッセージを送っても,offer/retractメッセージを受けとっても,negotiate状態は変わらない.

お互いに好きな回数アイテムの提示を行い,交換を提示するアイテムを追加できる.

negotiate_to_finish.svg

長かった.

たくさんの人に私のプロトコルが正しいかどうかレビューしてもらいましたが、そのときも全員が見逃していた競合状態がいくつかあります。 それらに気がついたのは、あとで自分でコードをレビューしているときでした。コードを 2 度以上読む必要が出てくるのは普通です。

自分でプロトコルを設計してみた後で,以下の質問を自分のプロトコルにぶつけてみるとよいそうだ.

なるほど.非同期プロトコルを作るのは大変なのだな. (この日記を書くのも大変だった)

このエントリーをはてなブックマークに追加