使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)
巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>
要求:
解析:
#include <semaphore.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
sem_t s1,s2,s3;
void* runner(void* p){
long tnum=(long)p;
for(int i=1;i<=5;i++){
if(tnum==0)
sem_wait(&s1);//等待(P操作)
else if(tnum=1)
sem_wait(&s2);//等待(P操作)
else(tnum=2)
sem_wait(&s3);//等待(P操作)
printf("Thread%ld:%d\n",tnum,i);
if(tnum==0)
sem_post(&s2);//释放(V操作)
else if(tnum=1)
sem_post(&s3);//释放(V操作)
else(tnum=2)
sem_post(&s1);//释放(V操作)
}
int main(){
pthread_t tid0,tid1,tid2;
//
sem_init(&s0,0,1);
sem_init(&s1,0,0);
sem_init(&s1,0,0);
}
pthread_create(&tid0,0,runner,(void*)0);
pthread_create(&tid1,0,runner,(void*)1);
pthread_create(&tid2,0,runner,(void*)2);
pthread_join(tid0,0);
pthread_join(tid1.0);
pthread_join(tid2,0);
sem_destroy(&s1);
sem_destroy(&s2);
sem_destroy(&s3);
return 0;