线程-----互斥量

   作者:下家山

一:互斥锁实例

1.1 代码是最后的了解手段

题目:有四个线程,T1,T2,T3,T4。其中T1,T2,T3三个线程负责给共享资源sum【全局变量】加1,T4检测当sum到达100的时候,打印sum的值,并清零,通知其他线程结束。

 

1.2 设计思路:

    T1,T2,T3的代码我们可以共享,代码框架如下:

Void *T123_Work(void *arg)
{

  While(!work_end){//如果结束标志为0
     pthread_mutex_lock(lock_add);//
对共享变量加之前上锁
     sum++;

     Printf(“0x%lx   reach  %d\n”,pthread_self(),sum);//输出共享变量的值,并带上线程ID,因为3个线程都在对sum1
     pthread_mutex_unlock(lock_add);//
加完后释放锁

   }
}

T4的代码,如下:

Void *T4_Work(void *arg)
{
      while (!work_end)//
如果结束标志为0
      {
            pthread_mutex_lock(lock_add);//
判断共享变量sum前上锁
            if(sum>=100)
            {
              printf(“sum reach 100!\n”);//
共享变量到达100后,并解锁
              pthread_mutex_unlock(lock_add);
            }else{

         Printf(“Please add sum...\n”);//不够100,提示再加
              pthread_mutex_unlock(lock_add);
              sleep(5); //
给其他线程足够的时间让他们加     
            }
      }
}

1.3 实例代码

1.4 编译执行结果

1.5 实例解析

1.6 模拟场景

二:怎么解决上述矛盾?

       条件变量!

2.1 代码:

2.2 编译执行结果

 

3.3 实例解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下家山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值