线程同步:指定2个线程按顺序执行(信号量)

如何让2个线程按照先后顺序执行n次呢?

如:线程A从用户输入得到值后存入全局变量num,此时线程B取走此值并且累加,总共执行n(5)次,完成后输出和

<很有意思的问题,在基本忘掉了所以线程同步方法(只记得mutex,和基本信号量原理)的情况下,考虑为什么2个mutex不能实现?>

我认为的原因:

mutex不能决定进程A还是进程B谁先执行(而信号量初始化的时候可以控制状态),对于临界区2者功能一样

2个信号量实现:

#include <me.h>

void* readin(void*);
void* addnum(void*);
int num = 0,temp;
sem_t a;
sem_t b;

int main()
{
  pthread_t pthreada,pthreadb;
  
  sem_init(&a,0,1);
  sem_init(&b,0,0);
  pthread_create(&pthreada,NULL,readin,NULL);
  pthread_create(&pthreadb,NULL,addnum,NULL);
  
  pthread_join(pthreada,NULL);
  pthread_join(pthreadb,NULL);

  sem_destroy(&a);
  sem_destroy(&b);
  printf("结果是:%d\n",num);
  return 0;
}

//通过信号量使得按照顺序执行 
void* readin(void *arg)
{
  for (int i=0; i<5; i++)
  {
    sem_wait(&a);
    printf("请输入值: \n");
    scanf("%d",&temp);
    sem_post(&b);
  }
}

void* addnum(void* arg)
{
  for (int i=0; i<5; i++)
  {
    sem_wait(&b);
    num += temp;
    sem_post(&a);
  }
}

A临界区执行结束使得进程B解除阻塞,B临界区执行结束使得A解除阻塞

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值