条件变量pthread

    xiaoxiao2021-03-29  38

    #include <pthread.h> #include <stdio.h> #include <stdlib.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/ pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/ void *thread1(void *); void *thread2(void *); int i=1; int main(void) { pthread_t t_a; pthread_t t_b; pthread_create(&t_a,NULL,thread1,(void *)NULL);/*创建进程t_a*/ pthread_create(&t_b,NULL,thread2,(void *)NULL); /*创建进程t_b*/ pthread_join(t_a, NULL);/*等待进程t_a结束*/ pthread_join(t_b, NULL);/*等待进程t_b结束*/ pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); exit(0); } void *thread1(void *junk) { for(i=1;i<=6;i++) { pthread_mutex_lock(&mutex);/*锁住互斥量*/ printf("thread1: lock %d\n", __LINE__); if(i%3==0){ printf("thread1:signal 1 %d \n", __LINE__); pthread_cond_signal(&cond);/*条件改变,发送信号,通知t_b进程*/ printf("thread1:signal 2 %d\n", __LINE__); sleep(1); } pthread_mutex_unlock(&mutex);/*解锁互斥量*/ printf("thread1: unlock %d\n\n", __LINE__); sleep(1); } } void *thread2(void *junk) { while(i<6) { pthread_mutex_lock(&mutex); printf("thread2: lock %d\n", __LINE__); if(i%3!=0){ printf("thread2: wait 1 %d\n", __LINE__); pthread_cond_wait(&cond,&mutex);/*解锁mutex,并等待cond改变*/ printf("thread2: wait 2 %d\n", __LINE__); } pthread_mutex_unlock(&mutex); printf("thread2: unlock %d\n\n", __LINE__); sleep(1); } } [root@panda huang]# gcc 1.c -lpthread -o tcd

    [root@panda huang]# ./tcd

    thread2: lock 43 thread2: wait 1  45 thread1: lock 26 thread1: unlock 34 thread1: lock 26 thread1: unlock 34 thread1: lock 26 thread1:signal 1  28  thread1:signal 2  30 thread1: unlock 34 thread2: wait 2  47 thread2: unlock 50 thread2: lock 43 thread2: unlock 50 thread1: lock 26 thread1: unlock 34 thread2: lock 43 thread2: wait 1  45 thread1: lock 26 thread1: unlock 34 thread1: lock 26 thread1:signal 1  28  thread1:signal 2  30 thread1: unlock 34 thread2: wait 2  47 thread2: unlock 50

    转载请注明原文地址: https://ju.6miu.com/read-664809.html

    最新回复(0)