開発環境
- 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(並列性の制御機構)、複数の共有資源を使う複雑さ、問題 3.44、問題 3.45を解いてみる。
その他参考書籍
問題3.44
Ben Bitdiddleの主張が正しく、Louis Reasonerの主張は正しくない。移動の問題では、各口座の預け入れと払い出しが直列化されているので、多くの人が多くのっこうざの間で並列的にお金を移したとしても、最終的な各口座の残高の値は1つになる。
交換の問題には、局所変数が使われていて、そこで計算に使われる共有変数は各口座間で直列化されてなく並列的にプロセスが進むので、それで、最終的な各口座の残高の値が複数の可能性が生じる。
問題3.45
Louisの考えのserialized-exchangeを呼び出した時、
(serializer1 (serializer2 (serializer1 withdraw difference))) (serializer1 (serializer2 (serializer2 deposit difference)))
が呼び出されることになるが、それぞれserializer1、serializer2で2回直列化されてしまっているので、それぞれのプロセスが走っている最中に、そのプロセス自身を止めてしまうことになり、処理が進まずに終わらないという問題が起きる。
0 コメント:
コメントを投稿