前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux】设置<信号量>控制<n个线程>之间<按指定顺序轮转>

【Linux】设置<信号量>控制<n个线程>之间<按指定顺序轮转>

作者头像
YY的秘密代码小屋
发布2024-10-28 08:28:36
820
发布2024-10-28 08:28:36
举报
文章被收录于专栏:C++系列

一.回顾:使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)

使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)

二.回顾:巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>

巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>

三.<信号量>实现<控制n线程>之间<按什么顺序轮转>

要求:

  • 有三个线程,通过信号量初值设定,可线程按照顺序输出数字。分别实现第2号线程和第1号线程和第0号线程先输出数字。

解析:

  • 待做
代码语言:javascript
复制
#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.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.回顾:使用<信号量>实现<线程互斥>——(解析:用信号量实现两个线程互斥输出1-10数字)
  • 二.回顾:巧妙运用< 信号量 >控制 <两个线程>之间<谁先执行>
  • 三.<信号量>实现<控制n线程>之间<按什么顺序轮转>
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档