同期機構 (Re: オブジェクト指向言語)
河野真治 @ 琉球大学情報工学です。
In article <YAS.06Feb24183247@kirk.is.tsukuba.ac.jp>, yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes
> > > 15: non_full.wait;
> > この条件ごとの条件変数で待つとかがクラシックね。そういう研究を
> > やってたりします。河野さんは知っている。
>
> 制限した方が、メモリの一貫性などまで考えると効率的なコードが
> 出せるし、あと、再帰禁止までいければ、バグも書きにくくなりま
> す。(ついでに、まっとうなプログラムも書きにくくなったりする
> んだけれど。)
このあたり、特に conditional variable とかって、僕は「直観的
に変だ」って感じているんだよね。特に「bounded buffer」。
そういうものが同期機構として入るのって変だと思う。
この掃いて捨てるほど沢山ある同期プリミティブの一つとして、久
野さんの集合で起きる奴を指定するってのがあるわけで、やっぱり
「さらに増やしてどうするの?」という気がする。
> 昔からある問題は、全然解決してないけれどね。相変わらず、わけ
> が分からないプログラムが簡単にかけます。新人が苦労する所も同じ。
> あまり進歩していません。
この原因でもあるわけだし。
突き詰めれば、割込み禁止/test and setになるわけなんだから、
そこから、プロセスキューの処理、スケジューラーまでに到達する、
なんらかの一貫した実装があるべきでしょ? ハードウェアでは、主
に arbitor で実装している。だとすれば、ソフトウェアもそうあ
るべきだと思う。
monitor とかconditional variable とかで、わけわからない情報
隠蔽するより、process queue を reflective にいじらせろって僕
は思う。そうすれば、割込み禁止/test and set まで落せるから。
ってなわけで、Continuation をいじっているわけなんだけど。
僕自身は、select/merge (つまりarbitor) を使って、lock
primitive を避けるスタイルが好きです。昔から。それが
一番、自然だと思う。
もっとも「思う」から、論文にまで持って行くには、かなり
距離があるわけだけど。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735