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みたいなことが起こってしまうと。
このあとは少しコードを書く必要があるみたいなので、別エントリーで。