プログラミング再入門

プログラミングをもう一度ちゃんと勉強する読書ノート

SICP 3.4 Concurrency: Time Is of the Essence

ノート

代入を導入する事でプログラムにある種の時間概念が生まれた。これによって色々と面倒な事を考慮しなければならなくなったがより現実に近いモデルが作れる。これを更に拡張して(現実に近づけて)複数の事が同時に起きる事をモデル化する。

3.4.1 The Nature of Time in Concurrent Systems

時間平行システムの性質。
ピーターが残高を確認してからお金を下ろそうとしても、確認と引き下ろしの間にポールがお金を引き出してしまう可能性があり、ピーターの残高確認は意味が無くなってしまう。
プログラムはある時点での残高から引き出す金額を引いて残高を再設定しているが、この計算は「ある時点」から「再設定」までの間に残高が変わらない事が前提であり、この間に残高が変わってしまうと間違った残高を保存してしまう。

Correct behavior of concurrent programs

必要以上に規制する事無く、複数のプロセスがある順番で実行されたのと同じ結果になる様にする事。
必ずしも実際に順番に実行される必要は無い。
あたかも順番に実行されるとは言え、その順番によっては複数の結果が起こりうる。

Exercise 3.38

a.
PPMの3人の処理が順番は分からないが順番に処理されるとして、起こりうる結果を列挙する。3つの処理の順列なので3!=6通り。

Peter Paul Mary $100→$110→$90→$45
Peter Mary Paul $100→$110→$55→$35
Paul Peter Mary $100→$80→$90→$45
Paul Mary Peter $100→$80→$40→$50
Mary Peter Paul $100→$50→$60→$40
Mary Paul Peter $100→$50→$30→$40

残高に依存するMaryの処理の順番が結果を左右する。
b.
図3.29の様に各ステップが入れ子になる可能性があるとしたら、a.で出した$35,$40,$45,$50以外の結果を出す処理順序は何か。
Peterは残高を参照した後、その額+$10で残高を上書きする可能性があり、
Paulは残高を参照した後、その額-$20で残高を上書きする可能性がある。
Maryは残高を2回参照するので、かなり色々な事をする可能性がある。

可能なパターンを列挙せよと言う問題ではないので最も幸せな残高が最高額となるパターンを描く。