1. 程式人生 > >【C/C++多執行緒程式設計之八】pthread條件變數

【C/C++多執行緒程式設計之八】pthread條件變數

#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);
       
}