#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
sem_t sem,sem1,sem2;
void* thread_a(void* arg){
LOOP:
sem_wait(&sem2);
printf("thread_a running \n");
sem_post(&sem);
sleep(1);
goto LOOP;
}
void* thread_b(void* arg){
LOOP:
sem_wait(&sem);
printf("thread_b running \n");
sem_post(&sem1);
sleep(1);
goto LOOP;
}
void* thread_c(void* arg){
LOOP:
sem_wait(&sem1);
printf("thread_c running \n");
sem_post(&sem2);
sleep(1);
goto LOOP;
}
int main(void){
sem_init(&sem,0,1);
sem_init(&sem1,0,0);
sem_init(&sem2,0,0);
pthread_t id[2];
pthread_create(&id[0],NULL,thread_a,NULL);
pthread_create(&id[1],NULL,thread_b,NULL);
pthread_create(&id[2],NULL,thread_c,NULL);
pthread_join(id[0],NULL);
pthread_join(id[1],NULL);
pthread_join(id[2],NULL);
return 0;
}
iotek@iotekclass:~/pwz1903C++/Depa/面试题/方凌计算机$ gcc test4.c -pthread
iotek@iotekclass:~/pwz1903C++/Depa/面试题/方凌计算机$ ./a.out
thread_b running
thread_c running
thread_a running
thread_b running
thread_c running
thread_a running
thread_b running
thread_c running
thread_a running
thread_b running
thread_c running
thread_a running
thread_b running
thread_c running
thread_a running
thread_b running
解释来自https://blog.csdn.net/u011124985/article/details/79994293
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)