̾??
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]
- ?????ॢ???Ȥ???λ???ޤ?????