- kosaki55tea
- 3989
- 0
- 3
- 0
. @unak @nalsh いえ、Windows NT 4.0 以降であれば pthread_cond_wait() 相当の SignalObjectAndWait() で安全な条件変数を作れるという話です。+ NT6.0 なら Condition Variable が綺麗
2012-02-23 01:00:35@mskwt @unak はい、NT 4.0からのAPIならWin2kでも動きますからね。まぁ、2kはすでに別の何かで動かなくなってるのに気づいてないとかいう展開がありえますが
2012-02-23 01:02:53@mskwt @nalsh 不自由な端末で見てるので話の流れを追いきれてないんですが、よさげなパッチを書けるぜという話であれば、チケットでも切って頂ければ取り込まれるのではないかと。
2012-02-23 01:05:53要約すると、pthread_cond_wait(cond = waiter, mutex) 相当の SignalObjectAndWait() を使うと thread_win32.c:native_cond_wait() が安全になるよって話。
2012-02-23 01:06:21@_ko1 native_mutex_unlock(mutex) した時点で、再入されると cond の一貫性は維持できないのでは?
2012-02-23 01:10:54@_ko1 /* cond is guarded by mutex */ の部分でいじっている cond に entry を追加している部分。WaitForSingleObject(entry.event) で待っている間にここに到達される可能性がある。
2012-02-23 01:15:27肝心なのは、「mutex を再獲得するまでに 1個以上解放する」 が要件なのに対して、「mutex を解放している間に 『ほげほげ (ここでは 1個以上の解放)』 しかしない」 という要件が Userland では満たせないという話。
2012-02-23 01:21:41@mskwt 「mutex を再獲得する」人(cond_wait)と,「1個以上解放する」人(cond_signal)は違うので,よくわかりません.
2012-02-23 01:25:09