関数型言語ML(SML, OCaml, etc.), Part 4
■ このスレッドは過去ログ倉庫に格納されています
0285デフォルトの名無しさん
2006/03/06(月) 10:50:59>失敗しますよね? 例えば、shareVar を mVar として、
それはその通りです。
おそらく、疑問の出発点は、mVarって何が嬉しいねん? という事でしょう。
mVar は「値を参照・それを元に新しい値の生成・それを書き込む」という一
連の手順を保証するのに適しています。あるスレッドが変数 m に対して
sync $$ mVar.put m $$ calc_new_value $$ sync $$ mVar.take m
したとします。仮に他のスレッドがこの処理の途中で同じような処理をしよう
としても、値が無いので、新しい値が書き込まれるまで待たされます。つまり、
「値を参照・それを元に新しい値の生成・それを書き込む」という一連の手順
は、必ず順番に行われるよう保証されます。
要は mVar は参照したら必ず更新する変数を意図しているのです。ちなみに、
272で示した「一度書き込んだら参照だけ何度も可能で、二度と書き込めない」
変数は iVar と呼ばれ、データの受渡しやStreamの実装など、幅広く使える変
数です。
■ このスレッドは過去ログ倉庫に格納されています