̾??
condvar
, cv_init
,
cv_destroy
, cv_wait
,
cv_wait_sig
, cv_timedwait
,
cv_timedwait_sig
, cv_signal
,
cv_broadcast
,
cv_broadcastpri
, cv_wmesg
— ?????ͥ??????ѿ?
<sys/param.h>
<sys/proc.h>
<sys/condvar.h>
void
cv_init
(struct
cv *cvp, const char *desc)
void
cv_destroy
(struct
cv *cvp) void
cv_wait
(struct cv *cvp,
struct mtx *mp) int
cv_wait_sig
(struct cv *cvp,
struct mtx *mp) int
cv_timedwait
(struct cv *cvp,
struct mtx *mp, int timo)
int
cv_timedwait_sig
(struct cv
*cvp, struct mtx *mp, int
timo) void
cv_signal
(struct cv *cvp)
void
cv_broadcast
(struct cv *cvp)
void
cv_broadcastpri
(struct cv
*cvp, int pri) const char
* cv_wmesg
(struct cv
*cvp)
?????ѿ??? mutex
??Ϣ?Ȥ??ƾ??֤?ȯ?????ԤĤ????˻??Ѥ????ޤ???
?????ѿ??? cv_init
()
?????Ѥ??ƺ????????ޤ??? ?????? cvp
?? struct cv
?Τ??????ΰ??ؤΥݥ???
desc
?Ϥ??ξ????ѿ????????????̥??ǽ?ü???줿ʸ?????ؤΥݥ??Ǥ???
?????ѿ??? cv_destroy
()
?????Ѥ????˲??????ޤ??? ?????åɤ?
cv_wait
(), cv_wait_sig
(),
cv_timedwait
() ?ޤ???
cv_timedwait_sig
()
?θƤӽФ??ˤ??äơ??????ѿ????ǥ??????Ȥ??ޤ???
?????åɤϡ? 1
?ĤΥ??????ȤΥ֥??å??????????뤿???ˤ?
cv_signal
()
?Ρ??ޤ??????ƤΥ??????ȤΥ֥??å????????????ˤ?
cv_broadcast
() ?ޤ???
cv_broadcastpri
()
?θƤӽФ??ˤ??äƥ??????ȤΥ֥??å????????Ԥ??ޤ???
?????????????Τ˲ä??ơ?
cv_broadcastpri
()
?ϡ??⤤ͥ???٤????äƤ??ʤ????ƤΥ????åɤ?ͥ???٤??夲?뤳?Ȥˤ??äơ?
???ƤΥ??????????????Ǥ? pri
??ͥ???٤????Ĥ??Ȥ??ݾڤ??ޤ???
cv_wmesg
() ?? cv_init
()
?ؤκǽ??θƤӽФ??ˤ??ä????ꤵ?줿
cvp ??????ʸ???????֤??ޤ???
?????åɤ?
cv_wait
(),
cv_wait_sig
(),
cv_timedwait
() ?ޤ???
cv_timedwait_sig
()
?θƤӽФ??????? mp
???ݻ????ʤ????Фʤ??ޤ?????
?????åɤ????????֤ǥ??????Ȥ????Ȥ??ˡ?
mp
?Ϥ??Υ????åɤ??֥??å????????????Բ?ʬ?˳??????졢???줫??
???δؿ??ƤӽФ????????????Բ?ʬ?˺Ƴ????????ޤ???
???ƤΥ??????Ȥ??????Τ? cvp
??Ϣ?Ȥ??Ƥ???Ʊ???? mp
???Ϥ??ʤ????Фʤ??ޤ?????
?????åɤ?
cv_signal
(),
cv_broadcast
()
?ޤ???
cv_broadcastpri
()
???ƤӽФ??Ƥ????֤ϡ????Ȥ??????Ȥ????Ϥ??Ƥ??ʤ??Ȥ??Ƥ⡢
mp
???ݻ????ʤ????Фʤ??ޤ?????
cv_wait
(),
cv_wait_sig
(),
cv_timedwait
() ??????
cv_timedwait_sig
()
?Υ֥??å??????????줿???ˡ????????θƤӽФ??????åɤ??¹Բ?ǽ?ˤ????ޤ???
cv_timedwait
() ??????
cv_timedwait_sig
()
?ϥ֥??å??????????? EWOULDBLOCK
???֤????˺?Ĺ timo /
HZ
?ô֥??????Ȥ??ޤ???
?????Ǥʤ????С?0 ???֤??ޤ???
cv_wait_sig
() ??????
cv_timedwait_sig
()
?ϡ??????ʥ뤬?Ȥ館???줿?????ˤ?̤???Τޤ?
EINTR
?ޤ??? ERESTART
???ͤ??????ޤ??? ?ޤ??ϡ?
cv_signal
() ?ޤ???
cv_broadcast
() ?????Τ????????????ˤ? 0
???ͤ??????ޤ???
?????ξ????ˤϡ?
cv_wait_sig
(),
cv_timedwait
() ??????
cv_timedwait_sig
() ?? 0 ???֤??ޤ???
?????Ǥʤ??????ˤϡ?0
?ǤϤʤ????顼?????ɤ??֤????ޤ???
cv_wmesg
()
?? cv_init
()
???Ϥ??줿????ʸ???????֤??ޤ???
cv_wait_sig
() ??????
cv_timedwait_sig
()
?ϰʲ??ξ????˼??Ԥ??ޤ???
- [
EINTR
]
- ?ޥ????????Ƥ??ʤ??????ʥ뤬?Ĥ??ޤ??ޤ?????
- [
ERESTART
]
- ?ޥ????????Ƥ??륷???ʥ뤬?Ĥ??ޤ??ޤ?????
cv_timedwait
()
??????
cv_timedwait_sig
()
?ϰʲ??ξ????˼??Ԥ??ޤ???
- [
EWOULDBLOCK
]
- ?????ॢ???Ȥ???λ???ޤ?????