线程1打印9以内不是3的倍数,线程2打印3的倍数
#include<pthread.h>
#include<stdio.h>
#include<unistd.h>
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int i=1;
void *t1(void*arg){
for(;i<=9;i++){
pthread_mutex_lock(&mutex);
if(i%3==0){
//pthread_cond_signal(&cond);
pthread_cond_broadcast(&cond);
}
else{
printf("thread 1 : %d\n",i);
}
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
void *t2(void*arg){
for(;i<9;){
pthread_mutex_lock(&mutex);
printf("pthread 2 lock\n");
while(i%3!=0)
{
pthread_cond_wait(&cond,&mutex);
printf("pthread 2 cond_wait return \n");
printf("thread 2 : %d\n",i);
}
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main(){
pthread_t p1,p2;
pthread_create(&p1,NULL,t1,NULL);
pthread_create(&p2,NULL,t2,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
gdut17@ubuntu:~/code/0227$ sudo gcc cond.c -pthread
gdut17@ubuntu:~/code/0227$ ./a.out
pthread 2 lock
thread 1 : 1
thread 1 : 2
pthread 2 cond_wait return
thread 2 : 3
pthread 2 lock
thread 1 : 4
pthread 2 lock
thread 1 : 5
pthread 2 cond_wait return
thread 2 : 6
pthread 2 lock
thread 1 : 7
pthread 2 lock
thread 1 : 8
pthread 2 cond_wait return
thread 2 : 9
gdut17@ubuntu:~/code/0227$