admin管理员组文章数量:1794759
【Linux】设置<信号量>控制<n个线程>之间<按指定顺序轮转>
一.回顾:使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)
使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)
- 传送门
二.回顾:巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>
巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>
- 传送门
三.<信号量>实现<控制n线程>之间<按什么顺序轮转>
要求:
- 有三个线程,通过信号量初值设定,可线程按照顺序输出数字。分别实现第2号线程和第1号线程和第0号线程先输出数字。
解析:
- 待做
#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;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-27,如有侵权请联系 cloudcommunity@tencent 删除void线程linuxincludejoin本文标签: Linux设置<信号量>控制<n个线程>之间<按指定顺序轮转>
版权声明:本文标题:【Linux】设置<信号量>控制<n个线程>之间<按指定顺序轮转> 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754610154a1704349.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论