典型的生產(chǎn)者烟具,消費(fèi)者多線程并發(fā)模型中巍佑,cond一般要和mutex配合使用,如下:
1.生產(chǎn)者:
pthread_mutex_lock(&mutex);
//set full
pthread_cond_signal(&cond);???????? //通知消費(fèi)者可以行動(dòng)了
pthread_mutex_unlock(&mutex);
2.消費(fèi)者:
pthread_mutex_lock(&mutex);
while(empty)? pthread_cond_wait(&cond,&mutex);//消費(fèi)者必須等待生產(chǎn)者,為啥要帶鎖等待咽笼?
pthread_mutex_unlock(&mutex);
wait要帶鎖是因?yàn)閣ait內(nèi)部會(huì)首先unlock才開(kāi)始阻塞等待,因?yàn)橹挥衭nlock戚炫,生產(chǎn)者才能
lock并進(jìn)行生產(chǎn)剑刑,繼而喚醒消費(fèi)者,
消費(fèi)者被喚醒后在wait內(nèi)會(huì)重新lock(mutex)
signal喚醒一個(gè)双肤,broadcast喚醒所有消費(fèi)者施掏,最后在持有mutex的情況下調(diào)用,否則有可能signal還未完成茅糜,消費(fèi)者就直接進(jìn)入臨界區(qū)七芭。
因此在wait函數(shù)內(nèi)實(shí)行了unlock和重新lock,但對(duì)外展現(xiàn)的是一直lock的邏輯
wait函數(shù)最后放在while循環(huán)中等待蔑赘,是因?yàn)橛锌赡鼙粍e的消費(fèi)者搶先消費(fèi)了