正しくTogetter / min.tにログインできない不具合が発生中です。X側の修正をお待ちください(詳細はこちら)

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

5
前へ 1 2 ・・ 6 次へ
usa @unak

@nalsh @mskwt 別にXP以降サポートでもいいんじゃないかな。でも積極的にそう変えるには理由として弱い感じ。

2012-02-23 00:57:13
_ko1 @_ko1

@nalsh @mskwt どのことを指してるのかわからない....

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

@unak @mskwt NT 6.0 からの API だと XP ごと…

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

@mskwt 最近忙しくなっちゃったので,3月にぜひ

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

. @unak @nalsh いえ、Windows NT 4.0 以降であれば pthread_cond_wait() 相当の SignalObjectAndWait() で安全な条件変数を作れるという話です。+ NT6.0 なら Condition Variable が綺麗

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

理屈並べるより、コードで語ったほうが早そうだな

2012-02-23 01:01:51
成瀬 @nalsh

@mskwt @unak はい、NT 4.0からのAPIならWin2kでも動きますからね。まぁ、2kはすでに別の何かで動かなくなってるのに気づいてないとかいう展開がありえますが

2012-02-23 01:02:53
usa @unak

@mskwt @nalsh 不自由な端末で見てるので話の流れを追いきれてないんですが、よさげなパッチを書けるぜという話であれば、チケットでも切って頂ければ取り込まれるのではないかと。

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

要約すると、pthread_cond_wait(cond = waiter, mutex) 相当の SignalObjectAndWait() を使うと thread_win32.c:native_cond_wait() が安全になるよって話。

2012-02-23 01:06:21
野良猫@がんばらない @mskwt

…逆に言うと安全ではなかったという話。

2012-02-23 01:07:13
_ko1 @_ko1

@mskwt いいえ,pthread_cond_wait() と同等の保証をしています.なので,なんら問題はありません.

2012-02-23 01:08:30
野良猫@がんばらない @mskwt

@_ko1 native_mutex_unlock(mutex) した時点で、再入されると cond の一貫性は維持できないのでは?

2012-02-23 01:10:54
_ko1 @_ko1

@mskwt cond の一貫性って具体的には?

2012-02-23 01:11:21
野良猫@がんばらない @mskwt

@_ko1 /* cond is guarded by mutex */ の部分でいじっている cond に entry を追加している部分。WaitForSingleObject(entry.event) で待っている間にここに到達される可能性がある。

2012-02-23 01:15:27
_ko1 @_ko1

@mskwt なるほど,こんな実装だったのか! 想像していた実装と違った! ありがとうございます.考え直します....

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

肝心なのは、「mutex を再獲得するまでに 1個以上解放する」 が要件なのに対して、「mutex を解放している間に 『ほげほげ (ここでは 1個以上の解放)』 しかしない」 という要件が Userland では満たせないという話。

2012-02-23 01:21:41
_ko1 @_ko1

@mskwt 改めて考えてみたんですが,これ問題あるかなぁ.というか,これ私が書いたんじゃないきがする.おお,やっぱり小崎さんだ.

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

pthread_cond_wait() のない世界について記事を書くか。

2012-02-23 01:23:39
_ko1 @_ko1

@mskwt 「mutex を再獲得する」人(cond_wait)と,「1個以上解放する」人(cond_signal)は違うので,よくわかりません.

2012-02-23 01:25:09
_ko1 @_ko1

@mskwt ガチャピンのコードを疑うなんて恐ろしい...!

2012-02-23 01:26:13
_ko1 @_ko1

@mskwt まじで,まずい例が思いつかないです.うーん.

2012-02-23 01:27:48
_ko1 @_ko1

@mskwt unblock してる時に,entry 弄るわけじゃないからいいんでないかなぁ.

2012-02-23 01:29:51
前へ 1 2 ・・ 6 次へ