1
我新的並行線程和我寫了一個示例程序以利用並行線程條件事件..Pthread的同步化查詢
線程2只是不列入出口,其目的是從代碼我想非常清楚。
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_mutex_t mut;
pthread_cond_t con;
#define LOCK &mut
#define COND &con
#define HAPPY 1
#define SAD 0
int count = 0, response = SAD;
void func_t1();
void func_t2();
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, &func_t1, NULL);
pthread_create(&tid2, NULL, &func_t2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
void func_t1()
{
for (;;)
{
pthread_mutex_lock(LOCK);
pthread_cond_wait(COND, LOCK);
if (count == 10)
{
printf("Thread1: You did your job finally, get lost now");
response = HAPPY;
pthread_mutex_unlock(LOCK);
break;
}
else
{
printf("Thread1: You are not capable of making me happy");
pthread_mutex_unlock(LOCK);
}
}
}
void func_t2()
{
for (;;)
{
if (response == SAD)
{
pthread_mutex_lock(LOCK);
count++;
printf("thread2: count incremented to %d...pls check if you are happy \n",
count);
pthread_cond_signal(COND);
pthread_mutex_unlock(LOCK);
}
else
{
printf("thread2:Ha..I finally made her happy \n");
break;
}
}
}
輸出:
thread2: count incremented to 106927...pls check if you are happy
thread2: count incremented to 106928...pls check if you are happy
thread2: count incremented to 106929...pls check if you are happy
thread2: count incremented to 106930...pls check if you are happy
thread2: count incremented to 106931...pls check if you are happy
thread2: count incremented to 106932...pls check if you are happy
thread2: count incremented to 106933...pls check if you are happy
thread2: count incremented to 106934...pls check if you are happy
thread2: count incremented to 106935...pls check if you are happy
thread2: count incremented to 106936...pls check if you are happy
thread2: count incremented to 106937...pls check if you are happy
thread2: count incremented to 106938...pls check if you are happy
thread2: count incremented to 106939...pls check if you are happy
thread2: count incremented to 106940...pls check if you are happy
thread2: count incremented to 106941...pls check if you are happy
thread2: count incremented to 106942...pls check if you are happy
thread2: count incremented to 106943...pls check if you are happy
Thread1: You are not capable of making me happythread2: count incremented to 106944...pls check if you are happy
thread2: count incremented to 106945...pls check if you are happy
thread2: count incremented to 106946...pls check if you are happy
thread2: count incremented to 106947...pls check if you are happy
thread2: count incremented to 106948...pls check if you are happy
thread2: count incremented to 106949...pls check if you are happy
thread2: count incremented to 106950...pls check if you are happy
thread2: count incremented to 106951...pls check if you are happy
thread2: count incremented to 106952...pls check if you are happy
thread2: count incremented to 106953...pls check if you are happy
thread2: count incremented to 106954...pls check if you are happy
thread2: count incremented to 106955...pls check if you are happy
thread2: count incremented to 106956...pls check if you are happy
thread2: count incremented to 106957...pls check if you are happy
thread2: count incremented to 106958...pls check if you are happy
thread2: count incremented to 106959...pls check if you are happy
它永遠不會結束....
將是有益的,如果你能在上面的代碼中指出的缺陷。