Rubyのnative_cond_wait()の実装は壊れている? Win32でcond_waitはどう実装すべきか

5
野良猫@がんばらない @mskwt

@nalsh thread_win32.c あたり、何とかしたいなーとか

2012-02-23 00:24:27
野良猫@がんばらない @mskwt

native_cond_wait() あたり、NT4.0以降は SignalAndWaitObject(), NT6.0 以降は Conditional Variable 使えるので素直に thread_pthread.c 風味にしたら喜ばれるかしら?

2012-02-23 00:26:46
野良猫@がんばらない @mskwt

s/SignalAndWaitObject/SignalObjectAndWait/

2012-02-23 00:29:27
野良猫@がんばらない @mskwt

SignalObjectAndWait() が初期の NT に存在しなかったのは設計ミスなんだけどね。。

2012-02-23 00:30:36
成瀬 @nalsh

@mskwt @unak さんとかその辺どうなのかしら。ちなみに Ruby 1.9 のサポート対象は Win2k 以降ですね。2.0 でも変わらないのかな

2012-02-23 00:31:48
野良猫@がんばらない @mskwt

あとは、ETW で思いっきり Profiling しちゃうとか、NT Native fork() 入れちゃうとか ← それはやめとけ

2012-02-23 00:31:57
成瀬 @nalsh

@mskwt ETW での profiling は DTrace ネタと絡めて構想自体は話してますね。コードは一行もないはず。fork は喜ぶ人はいそうですね、怖いけどw

2012-02-23 00:33:16
野良猫@がんばらない @mskwt

@nalsh native_mutex_unlock(mutex); かけて、新しく cond に追加した Event 待ちしているので、ここって再入されるとまずいんじゃ?signal and wait は Kernel 実装しか手がない気がする。

2012-02-23 00:34:56
野良猫@がんばらない @mskwt

@nalsh NT Native な fork() 面白いですよ。 @_ko1 さん知ってるはず。CreateThread() した Thread から fork() するとそいつが Main Thread になるのは私も最近まで知らなかった…。

2012-02-23 00:36:46
_ko1 @_ko1

@mskwt む,ぼくの書いたコードがでぃすられてる

2012-02-23 00:38:04
成瀬 @nalsh

@mskwt GVLも解放しているので、現在の用法においては問題ないと理解してます。特殊な使い方をするとダメで、そこがpthread側で火を噴いたことはありますね https://t.co/yOeQ0twl

2012-02-23 00:40:31
_ko1 @_ko1

@nalsh @mskwt これは特殊な問題じゃなくてバリアのバグでしょう

2012-02-23 00:41:51
野良猫@がんばらない @mskwt

ここはあれですか、 @_ko1 先生に 「NT ならこう設計する!」 と殴りこみに行けばいい流れですか!というか、新年会しましょうよ

2012-02-23 00:42:47
_ko1 @_ko1

@nalsh @mskwt バグを「特殊な使い方」とか擁護しないでほしい

2012-02-23 00:43:00
野良猫@がんばらない @mskwt

.@_ko1 @nalsh 再入可能性もありますが、NT4 以降なら SignalObjectAndWait で条件変数を作れるし、Windows Vista 以降なら Condition Variable 使って pthread 風味にきれいに書き下せるのではー?と。

2012-02-23 00:47:50
野良猫@がんばらない @mskwt

そんなことより新年会をしましょう

2012-02-23 00:48:42
_ko1 @_ko1

@mskwt @nalsh なるほど,複数の cond が起きる可能性がありますね.pthread_cond_wait() は,必ず1つしか起きない,ということを保証してるのかな.

2012-02-23 00:49:53
_ko1 @_ko1

@mskwt @nalsh なるほど,専用APIが増えてるんですね.気づきませんでした.

2012-02-23 00:50:42
野良猫@がんばらない @mskwt

.@_ko1 @nalsh そです。ある Mutant と Signal を Atomic に操作するには Kernel Mode でやる必要がある。Unlock した後、Context Switch または他の Thread が入ると滅茶苦茶になる

2012-02-23 00:51:27
成瀬 @nalsh

@_ko1 @mskwt ぼかぁそういう使い方ができるのは変だと思うんです。バグじゃないなら仕様がおかしい

2012-02-23 00:53:25
野良猫@がんばらない @mskwt

.@nalsh @_ko1 設計上のバグとして、NT4 だったか 3.5 で API 追加されたはず。これがないと Atomic 操作に支障が出るので。

2012-02-23 00:55:08
1 ・・ 6 次へ