线程的同步与互斥
进程线程间的互斥相关背景概念
【临界资源】:多线程执行流共享的资源就叫做临界资源
【临界区】:每个线程内部,访问临界自娱的代码,就叫做临界区
【互斥】:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用
【原子性】:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成
互斥量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