exercise 3.43~46

実家でまたーりしてたら、部活のICPC練習会忘れてた・・・。orz
ゆっくりしていった結果がk(ry

ex3.43

絵をうpするのがめんどい・・・
とりあえず、最初のexchangeであれば、differenceの計算は間違うかもしれないが、その後のwithdrawとdepositはserializeされているので、accountのbalanceの合計は変わらない。
また、serializeしないとwithdrawやdepositが入り乱れて合計値が変わってしまう。まぁFigure3.29見たいなことが起こる、と。

ex3.44

うまく説明でき無いけど、Loisは間違ってるはず。
exchangeはなんというか、処理に一連の流れみたいなのがあって(differenceの計算→withdraw,deposit みたいな)その流れを保護するのにserializeが必要だったけど、transferはそういうのがないので大丈夫・・・って言ったらいいのかなぁ。

ex3.45

serialized-exchangeすると、同じaccountのserializerを重ねがけしてしまうので、後で述べられているDead Lockが起こってしまう。

ex3.46

また図か…
よーするに、あるプロセスが、test-and-setでbeginに入り、そこでcellがtrueに変更される前に他のプロセスもbeginの中まで入っちゃったら、serializeしてるはずなのに、二つのプロセスが実行されてしまうはず。ということで、Figure3.29みたいなことが起こってしまうと。

このあとは少しコードを書く必要があるみたいなので、別エントリーで。