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

yarv-dev:638

From: SASADA Koichi <ko1 atdot.net>
Date: Sun, 02 Oct 2005 18:15:05 +0900
Subject: [yarv-dev:638] Re: thread support

 ささだです。

Shiro Kawai wrote:
> とかやってると、1行目と2行目の間で他スレッドがstrを破壊的変更したら
> やばいっす。ちゃんとやるなら長さと実体へのポインタを含むread-onlyの
> 構造を間にかまして、アトミックにsizeとptrをとってくるAPIを用意する、
> ということになるでしょうか。

 パスカル文字列だっけ、文字列の先頭が長さ、というデータ構造。あんな感じ
に作り変えたらこの辺の問題は解決するのかな、と少し思いました。ptr が文字
列の実体で *((int *)ptr-1) が長さ、とか。配列も同様。

> ただ、現状でもSchemeレベルでmutableなオブジェクトをスレッド間で共有
> したり、thread-unsafeなCライブラリルーチンを呼んだりする場合の
> 排他制御はSchemeプログラマの責任ってことになってるんで、
> 結局処理系としてどこまで安全性を保証するかって話になると思います。

 はい。処理系の選択肢として、スレッド間で共有するデータの排他制御は
Ruby プログラマ(Ruby 処理系利用者)に一任する、というのもありますよね。

 前、田中哲さんに指摘されたのですが、Ruby の処理系は SEGV などは *絶対
に起こらないべきである* (たとえば、call/cc 関連で大量のバグが出たとき、
これに対応するために大量のコード修正が行われた)と言われたことがあるの
で、そういう、バグを一切許さないのが Ruby 流なのかなぁ、と思わないでもな
いです。

 まぁ、unsafe ruby を別途提供するのもいいのかも。

-- 
// SASADA Koichi at atdot dot net
//

--
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       ]