yarv-dev:636
From: Shiro Kawai <shiro lava.net>
Date: Sat, 01 Oct 2005 15:58:50 -1000 (HST)
Subject: [yarv-dev:636] Re: thread support
From: SASADA Koichi <ko1 atdot.net> Subject: [yarv-dev:635] Re: thread support Date: Sat, 01 Oct 2005 23:41:29 +0900 > すみません、Gauche って relloc や free をしないんでしたっけ? reallocはしません。freeはGC任せです。 文字列の破壊的変更操作が入る際に、文字列オブジェクトが指す 実体へのポインタが別の実体を指すようになることはあります。 > ちなみに、realloc や free をしない実装にするとして、たとえば len (文 > 字列の長さ)と ptr (文字列の実体)で一貫性が取れなくなって危険なケース > がありそうな気がするんですが、そうでもないんでしょうか。もちろん、処理系 > のプログラマが気をつければいい話ではありますが。 あっそれは有り得ますね。 int size = SCM_STRING_SIZE(str); const char *p = SCM_STRING_START(str); write(fd, p, size); とかやってると、1行目と2行目の間で他スレッドがstrを破壊的変更したら やばいっす。ちゃんとやるなら長さと実体へのポインタを含むread-onlyの 構造を間にかまして、アトミックにsizeとptrをとってくるAPIを用意する、 ということになるでしょうか。 ただ、現状でもSchemeレベルでmutableなオブジェクトをスレッド間で共有 したり、thread-unsafeなCライブラリルーチンを呼んだりする場合の 排他制御はSchemeプログラマの責任ってことになってるんで、 結局処理系としてどこまで安全性を保証するかって話になると思います。 --shiro -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
628 2005-09-30 20:11 [ko1 atdot.net ] thread support 631 2005-09-30 22:10 ┣[ko1 atdot.net ] 633 2005-09-30 23:35 ┃┣[matz ruby-lang.org ] 635 2005-10-01 23:41 ┃┃┗[ko1 atdot.net ] -> 636 2005-10-02 10:58 ┃┃ ┗[shiro lava.net ] 638 2005-10-02 18:15 ┃┃ ┗[ko1 atdot.net ] 640 2005-10-02 19:05 ┃┃ ┗[shiro lava.net ] 641 2005-10-02 21:23 ┃┗[shudo computer.org ] 643 2005-10-03 09:33 ┃ ┗[ko1 atdot.net ] 632 2005-09-30 23:28 ┗[matz ruby-lang.org ] 634 2005-10-01 23:30 ┗[ko1 atdot.net ]