yarv-dev:633
From: Yukihiro Matsumoto <matz ruby-lang.org>
Date: Fri, 30 Sep 2005 23:35:32 +0900
Subject: [yarv-dev:633] Re: thread support
まつもと ゆきひろです In message "Re: [yarv-dev:631] Re: thread support" on Fri, 30 Sep 2005 22:10:41 +0900, SASADA Koichi <ko1 atdot.net> writes: | たとえば、String オブジェクトの RSTRING(str)->ptr のような操作は排他制 |御が必要になる(これを全部排除しようとすると大変...)。これは、例えば |ptr を取得したあと、スレッドスイッチが起こり、他のスレッドが str に対し |て破壊的操作をして、ptr が指しているメモリオブジェクトを REALLOC なりし |た場合、元のスレッドが free したメモリオブジェクトを参照してしまいます。 | |ThreadA | ptr = RSTRING(str)->ptr; |ThreadB (switch) | RSTRING(str)->ptr = other_memory_location; |ThreadA (switch) | ptr[0]; /* error! */ | | そのようなことが起こらないように、細かく排他制御を行わなければならな |い。(排他制御を行わないが高速な実装を提供し、Ruby ユーザの責任、とする |ことも出来るが、処理系として正しいかは謎)。 この件に関しては、Gaucheみたいにreallocやfreeを行わないのも ひとつの考えかもしれません。もっともそれだとBoehm GCかその同 等品を必要とすることになるわけですが。 | また、今後の開発方針などに対してご意見などあればご教示ください。 私はm1でも平気ですが、世の中の要求はnative threadになんらか の形で対応してほしいということのようです。 当面m2で、段階的に(たとえばVMはスレッドセーフにしてGIを開放 するが、C関数実行中はGIを使う、とか)m3に近づければ良いのでは ないでしょうか。 | この辺のニーズの把握って、たとえば NaCl さんなんかでは何かデータあった |りしますか。 うちでthreadを積極的に使った例はありません。 まつもと ゆきひろ /:|) -- 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 ]