【C/C++多執行緒程式設計之八】pthread條件變數
阿新 • • 發佈:2019-01-30
#include #include #include #include #pragma comment(lib, "pthreadVC2.lib") //必須加上這句 pthread_t t1; //pthread_t變數t1,用於獲取執行緒1的ID pthread_t t2; //pthread_t變數t2,用於獲取執行緒2的ID pthread_mutex_t mutex; pthread_cond_t cond; int i=0; //共享資源 void * child1(void *arg) { while(1) { pthread_mutex_lock(&mutex); i++; if(i%5==0) { pthread_cond_signal(&cond); } else { printf("我是執行緒 1 列印的數都非5的倍數: %d \n",i); } pthread_mutex_unlock(&mutex); Sleep(1000); } } void *child2(void *arg) { while(1) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond,&mutex); //獲得訊號之前,會重新獲得互斥鎖 printf("我是執行緒 2 列印5的倍數: %d \n",i); pthread_mutex_unlock(&mutex); //需要在此處釋放互斥鎖 Sleep(1000); } } int main(void) { pthread_cond_init(&cond,NULL); pthread_mutex_init(&mutex,NULL); pthread_create(&t1,NULL,child1,NULL); pthread_create(&t2,NULL,child2,NULL); Sleep(100000000); }