e$B>.:j$G$9e(B
e$BAGKQ$J5?Ld$G$9$,e(B ConditionVariable#wait
e$B$O2?8NIC?t$rJV$7$F$$$k$N$G$7$g$&$+!)e(B
e$B0z?t$,e(Bfloate$B$J$iJV5QCM$be(Bfloate$B$K$9$k$Y$-$@$H;W$$$^$9$,!#$=$&$9$l$P8mH=Dj$Oe(B
e$B$@$$$V8:$k$h$&$Je(B
2010e$BG/e(B5e$B7ne(B5e$BF|e(B13:22 Yusuke ENDOH [email protected]:
Timed Wait Semantics e$B$N9`$G$9$+e(B?
e$B$=$3$He(B Timed Condition Wait e$B$N$H$3$m$G$9!#e(B
e$B$?$@$7@5D>!“$=$NJ8>O$r@5$7$/M}2r$G$-$F$$$k<+?.$O$”$^$j$"$j$^$;$s!#e(B
e$B$“$NJ8>O$,8@$C$F$$$k$3$H$b$b$C$H$b$J$s$@$1$I!”$8$c$“;~9oJQ99$He(Bracee$B$,5/$-$?$ie(B
e$B$I$&$9$k$s$@$m$&$H$+0c$&LdBj$,$”$k5$$,$9$k$s$G$9$h$M$'!#e(B
e$B;d$,J,$+$C$F$J$$$@$1$+$b$7$l$^$;$s$,!#e(B
Timed Wait Semantics
e$B$N9`$K$O;~9o%9%-%C%W$,5/$-$?>l9g$NF0:n$K$D$$$Fe(B
e$B@bL@$O$“$j$^$9$,!”;~9o4,$-La$7;~$OKm$rG($i$;$H8@$C$F$$$k$h$&$K46$8$ke(B
e$B@dBP;~9o$,;XDj$G$-$J$$8B$j!“!V@5$7$$;H$$J}!W$,B8:_$7$J$$$H;W$$$^$9!#e(B
e$B$J$N$G!”@dBP;~9o;XDj$,<BAu$5$l$J$$8B$j!“e(B1.9.2 e$B$GCfESH>C<$J$b$N$HDs6!e(B
e$B$9$Y$-$G$J$$$H;W$$$^$9!#e(B
e$B@dBP;~9o;XDj$be(B new feature e$B$J$N$G!”:#$+$ie(B 1.9.2 e$B$K@9$j9~$`$Y$-$G$J$$e(B
e$B$H;W$$$^$9$,!“<BAu$9$k?M$,$$$k$J$iCG8GH?BP$H$$$&$[$I$G$O$”$j$^$;$s!#e(B
e$B$$$d$!!“AjBP;~9o$O$&$l$7$$$G$9$h!#E57?E*%f!<%9%1!<%9$Ke(BLaie$B$5$s$,$”$2$F$$$ke(B
Ne$BIC$K0l2s5/>2$7$F$-$FDj4|=hM}$r<B9T$9$k$H$$$&$N$,$"$j$^$9$,!"e(B
e$BMW5a$,!Ve(BNe$BIC$K#12s!W$J$N$GAjBP;~9o$N$[$&$,AGD>$@$7ICC10L$NOC$r$7$F$k$J$ie(B
preempte$B$N8m:9$J$s$F$?$+$,CN$l$F$$$k$7!&!&e(B
Timed Condition Wait
e$B$N$[$&$NOC$O@dBP;~9o$r0z?t$K$H$k$H$$$&0F$He(BLinuxe$B$Ne(Bselect(2)e$B$Ne(B
e$B$h$&$K7P2a;~9o$rJV$9$H$$$&0F$Ne(B2e$B0F$,$"$k$N$@$1$I!“AjBP;~9oe(BAPIe$B$O@dBP;~9oe(BAPIe$B$Ne(B
e$B%i%C%Q$H$7$F<BAu$G$-$k$G$7$g!#$H$$$&$N$,e(Bpthreade$B$NM}6~$@$H;W$C$F$$$Fe(B
e$B$”$s$^$j;H$$>!<j$X$NG[N8$,$J$$$J$!$H46$8$F$$$^$9!#e(B
e$B$^$?e(B [Bug #2629] e$B$G$O!“e(Btimeout e$B$G%j%?!<%s$7$?$+$I$&$+$rJV$jCM$H$7$Fe(B
e$BEA$($k$Y$-$@!”$H$$$&;XE&$b$"$j$^$9!#$3$l$,!"e(B
- e$B$J$$$H$^$:$$e(B
- e$B$J$/$F$b$h$$e(B
- e$B$"$k$H$^$:$$e(B
e$B$N$I$l$+$H$$$&H=CG$b$$$^$$$A$7$+$M$F$$$^$9!#$3$C$A$O$I$&;W$$$^$9$+!)e(B
+1 => e$B$J$$$H$^$:$$e(B
e$B0lHLO@$H$7$F$$$&$H!"860xITL@$G$b<BAu$G$-$k$N$O%j%H%i%$$,0BA4$J%1!<%9$K8B$i$l$k$H;W$C$F$$$Fe(B
Cond#waite$B$N>l9g!“e(BCond#signale$B$5$l$?$”$H$b$&0l2se(Bwaite$B$9$k$H?2$F$7$^$&$N$Ge(B
e$B!V$G$-$k$+$$1!W$HJI$rC!$/%1!<%9$,=P$k$s$8$c$J$$$+$Je(B
e$BKM$NCf$G$O!"AjBP;~9o$r<h$C$F$$$k$3$H$h$j$be(B
e$B!&7P2a;~9o$,IC?t$K4]$a$i$l$F$*$j!"$+$De(B
e$B!&e(BETIMEDOUTe$B$+$I$&$+$rCN$k<jCJ$,$J$$e(B
e$B$,LdBj$K8+$($^$9!#e(B
e$B40A4$KM>CL$G$9$,!"e(BMutex#locked? e$B$b%m%8%C%/Cf$G;H$&$Y$-$G$J$$MWCm0Ue(B
e$B%a%=%C%I$@$H;W$C$F$$$^$9!#e(B
e$BC&@~$D$$$G$Ke(BLinux kernele$B$NOC$r$9$k$H!"e(Bhogehoge_is_locked()
e$B$O$[$H$s$Ie(BBUG_ON
e$B!Je(BLinuxe$B$NCf$G$Ne(Basserte$BAjEv!K$G;H$o$l$F$$$^$9!#e(B
e$B!J0lIte(BAdaptive mutexe$BEy$N<BAu$K;H$C$F$$$kJQBV$5$s$,$$$k$1$I!Ke(B
e$B$G!“%F%9%H$H$+$r9M$($k$H4X?t@hF,$K!Ve(BXYe$B%m%C%/$,$H$l$F$J$+$C$?$ie(Bpanice$B!W$H$$$&e(B
e$B=hM}$OMWK>$,$”$k$h$&$K;W$$$^$9!Je(BRubye$B$@$HNc30$K$J$k$N$+$Je(B?e$B!Ke(B
e$B;d$NM}2r$G$O!“$”$C$A$N@$3&$G=jM-<T%A%'%C%/$r$7$F$$$J$$$N$O!"e(B
e$BC1$K$[$%G%P%C%0MQ$N5!G=$KJ#;($J<BAuF~$l9~$_$?$/$J$$$+$ie(B
e$B$@$HM}2r$7$F$$$^$9!#e(B
e$B$J$N$G!"e(BRubye$B$Ne(BMutex#is_locked? e$B$bF1$8$G!"e(Binitial
implemente$B;~$Ke(B
ownere$B$r<BAu$9$k$N$,LLE]$@$C$?$@$1$@$H?dB,$7$F$$$^$9!#e(B
Mutex#own?
e$B$N<BAu$K$D$$$F$O!VH?BP$9$kM}M3$O$J$$$1$I;vA0$G$O$-$C$H$d$i$J$$!We(B
e$B$0$i$$$N2ACM4Q$G$9$+$M$'!#e(Bunless is_locked? e$B$Ne(Bfalse
positivee$B$OBgJQ%l%"$J$N$Ge(B
e$B%F%9%HDxEY$J$i:$$j$^$;$s$7!#e(Brdoce$B$KCm0U=q$-$0$i$$$,3Z$G$h$$$N$G$O$J$$$+$J$!e(B