[前][次][番号順一覧][スレッド一覧][生データ]

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       ]