概念:條件變數不是鎖,要和互斥量組合使用。條件變數就是生產者「生產」完成,消費者才能「使用」,如果沒有「產品」,消費者就會被條件變數cond阻塞等待生產者「生產」。(生產者與消費者模型)
函式:
int pthread_cond_timedwait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
struct timespecprodinfo;
prodinfo *head = null;
void *thr_producter(void *arg)
return null;
}void *thr_customer(void *arg)
prod = head;
head = head->next;
printf("----%s----self = %lu----%d\n",__function__,pthread_self(),prod->num);
pthread_mutex_unlock(&mutex);
sleep(rand()%4);
free(prod);
}return null;
}int main()
輸出:~$ gcc cond_product.c -lpthread
~$ ./a.out
----thr_producter----self = 140197865371392----1000
----thr_customer----self = 140197856978688----1000
----thr_producter----self = 140197865371392----1001
----thr_customer----self = 140197731759872----1001
----thr_producter----self = 140197865371392----1002
----thr_customer----self = 140197856978688----1002
----thr_producter----self = 140197865371392----1003
----thr_producter----self = 140197865371392----1004
----thr_producter----self = 140197865371392----1005
----thr_customer----self = 140197731759872----1005
----thr_producter----self = 140197865371392----1006
----thr_producter----self = 140197865371392----1007
----thr_customer----self = 140197856978688----1007
----thr_customer----self = 140197731759872----1006
linux系統程式設計 執行緒同步 條件變數 cond
執行緒同步 條件變數 cond 再引入條件變數之前,我們先看下生產者和消費者問題 生產者不斷地生產產品,同時消費者不斷地在消費產品。這個問題的同步在於兩處 第一,消費者之間需要同步 同一件產品只可由一人消費。第二,當無產品可消費時,消費者需等待生產者生產後,才可繼續消費,這又是乙個同步問題。詳細了解...
Linux執行緒同步之條件變數
與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。條件變數使我們可以睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙...
linux 執行緒學習之條件變數
下面是乙個簡單的例子,我們可以從程式的執行來了解條件變數的作用。include include include pthread mutex t mutex pthread mutex initializer 初始化互斥鎖 pthread cond t cond pthread cond initia...