- kosaki55tea
- 3964
- 0
- 3
- 0
native_cond_wait() あたり、NT4.0以降は SignalAndWaitObject(), NT6.0 以降は Conditional Variable 使えるので素直に thread_pthread.c 風味にしたら喜ばれるかしら?
2012-02-23 00:26:46@mskwt @unak さんとかその辺どうなのかしら。ちなみに Ruby 1.9 のサポート対象は Win2k 以降ですね。2.0 でも変わらないのかな
2012-02-23 00:31:48あとは、ETW で思いっきり Profiling しちゃうとか、NT Native fork() 入れちゃうとか ← それはやめとけ
2012-02-23 00:31:57@mskwt ETW での profiling は DTrace ネタと絡めて構想自体は話してますね。コードは一行もないはず。fork は喜ぶ人はいそうですね、怖いけどw
2012-02-23 00:33:16@nalsh native_mutex_unlock(mutex); かけて、新しく cond に追加した Event 待ちしているので、ここって再入されるとまずいんじゃ?signal and wait は Kernel 実装しか手がない気がする。
2012-02-23 00:34:56@nalsh NT Native な fork() 面白いですよ。 @_ko1 さん知ってるはず。CreateThread() した Thread から fork() するとそいつが Main Thread になるのは私も最近まで知らなかった…。
2012-02-23 00:36:46@mskwt GVLも解放しているので、現在の用法においては問題ないと理解してます。特殊な使い方をするとダメで、そこがpthread側で火を噴いたことはありますね https://t.co/yOeQ0twl
2012-02-23 00:40:31ここはあれですか、 @_ko1 先生に 「NT ならこう設計する!」 と殴りこみに行けばいい流れですか!というか、新年会しましょうよ
2012-02-23 00:42:47.@_ko1 @nalsh 再入可能性もありますが、NT4 以降なら SignalObjectAndWait で条件変数を作れるし、Windows Vista 以降なら Condition Variable 使って pthread 風味にきれいに書き下せるのではー?と。
2012-02-23 00:47:50@mskwt @nalsh なるほど,複数の cond が起きる可能性がありますね.pthread_cond_wait() は,必ず1つしか起きない,ということを保証してるのかな.
2012-02-23 00:49:53.@_ko1 @nalsh そです。ある Mutant と Signal を Atomic に操作するには Kernel Mode でやる必要がある。Unlock した後、Context Switch または他の Thread が入ると滅茶苦茶になる
2012-02-23 00:51:27.@nalsh @_ko1 設計上のバグとして、NT4 だったか 3.5 で API 追加されたはず。これがないと Atomic 操作に支障が出るので。
2012-02-23 00:55:08