2013年7月27日土曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.4(並列性)、3.4.2(並列性の制御機構)、共有状態へのアクセスの直列化、Schemeの直列変換器、問題 3.39、問題 3.40、問題 3.41、問題 3.42を解いてみる。

その他参考書籍

問題3.39

  • 100: P_1がxを100に設定し、次にP_2がxを101に増加する。
  • 101: P_2がxを11に増加し、次にP_1がxをx掛けるxに設定する。
  • 100: P_1がx掛けるxを計算(100)し、P_2がxを11に増加し、P_1がxを100に設定する。

の3つが残る。

問題 3.40

並列的に走って混ざり合いに依存して実行の結果となり得るxの値の可能性。

  • 1000000: P_1がxを100に設定し、次にP_2がxを1000000に設定する。
  • 10000: P_1がxにアクセスし(10)、次にP_2がxを1000に設定し、次にP_1がxを10000に設定する。
  • 100000: P_2がxにアクセスし(1度、10)、P_1がxを100に設定し、P_2がxを100000に設定する。
  • 100: P_1がxにアクセスし(2度)、P_2がxにアクセスし(3度)、P_2がxを1000に設定し、P_1がxを100に設定する。
  • 1000: P_1がxにアクセスし(2度)、P_2がxにアクセスし(3度)、P_1がxを100に設定し、P_2がxを1000に設定する。

他の並列的に走って混ざり合う場合も、値は上記のいずれかと同じ値になった。

直列化した手続きの場合は1000000が残る。

問題 3.41

Benの心配を示すシナリオは無い。(コメントの行の手続きは強雨雄編数balanceの値を更新することはないから。)

問題 3.42

問題の変更は安全。特に二つのmake-accountの版で許される並列性の間には何も違いはない。(どちらも同じ直列変換器(protected)で手続きを直列化しているから。)

0 コメント:

コメントを投稿