前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含:

巧妙运用< 信号量 >实现<指定顺序>的<多个线程严格轮转交替输出(互斥)>
要求:
解析:

#include <semaphore.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
sem_t s1,s2;
void* runner(void* p){
long tnum=(long)p;
for(int i=1;i<=5;i++){
if(tnum==0)
sem_wait(&s1);//等待(P操作)
else
sem_wait(&s2);//等待(P操作)
printf("Thread%ld:%d\n",tnum,i);
if(tnum==0)
sem_post(&s2);//释放(V操作)
sem_post(&s1);//释放(V操作)
}
int main(int argc,char** argv){
pthread_t tid0,tid1;
int num=atoi(argv[1]);
if(num==0){
//我们命令行输入0,表示0号线程先执行,给0号线程的信号量设置成1,给0号线程的信号量设置成0
sem_init(&s0,0,1);
sem_init(&s1,0,0);
}
else{
//我们命令行输入1,表示1号线程先执行,给1号线程的信号量设置成1,给0号线程的信号量设置成0
sem_init(&s1.0,1);
sem_init(&s0.0,0);
}
pthread_create(&tid0,0,runner,(void*)0);
pthread_create(&tid1,0,runner,(void*)1);
pthread_join(tid0,0);
pthread_join(tid1.0);
sem_destroy(&s1);
sem_destroy(&s2);
return 0;