Linux : 线程的同步与互斥(模拟买票系统)

线程的同步与互斥

进程线程间的互斥相关背景概念

【临界资源】:多线程执行流共享的资源就叫做临界资源
【临界区】:每个线程内部,访问临界自娱的代码,就叫做临界区
【互斥】:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用
【原子性】:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成

互斥量mutex

  • 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量
  • 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互
  • 多个线程并发的操作共享变量,会带来一些问题(看下面的代码,思考为什么会出现这种问题呢?)
      //模拟实现一个购票系统,发现现象
 #include <iostream>
 #include <pthread.h>
 #include <unistd.h>
      
 int tickets = 1000;
 void *BuyTicket(void *arg)
 {
   
       
     for(;;){
   
   
         if( tickets > 0 ){
   
                                                              
             usleep(1000);
             std::cout << "Get ticket success :" << tickets--   << std::endl;
         }else{
   
   
             break;
         }
     }
     std::cout << "thread" << pthread_self 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值