開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(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 コメント:
コメントを投稿