互斥量与信号量非常相似,他允许程序员每一次锁住某个变量,使得每一次只能有一个线程访问他。
一、信号量是什么?和信号量一样,互斥量用于保护一段代码的,保证一次只能被一个线程执行。
二、信号量API使用一个信号量,其基本步骤是:
- 声明一个互斥量
- 初始化一个互斥量
- 线程1使用
pthread_mutex_lock
获取执行权 - 线程2使用
pthread_mutex_unlock
释放执行权 - 销毁互斥量
pthread_mutex_destory
线程头文件本身就有互斥量的定义,#include
pthread_mutex_t lo;
初始化
int pthread_mutex_init (pthread_mutex_t *mutex,
const pthread_mutexattr_t *mutexattr)
pthread_mutex_t *__mutex
互斥量地址const pthread_mutexattr_t *__mutexattr
互斥量属性地址- 返回值,没消息就是好消息,如果有,那就是错误代码
int pthread_mutex_lock(pthread_mutex_t * mutex);
int pthread_mutex_unlock(pthread_mutex_t * mutex);
pthread_mutex_lock
和pthread_mutex_unlock
都接受一个互斥量地址。pthread_mutex_lock
可能阻塞当前进程,阻塞的条件是,有另外的线程率先开了锁,阻塞的线程必须等待其他线程释放互斥锁。
int pthread_mutex_destory(pthread_mutex_t* mutex);
回收互斥锁的资源。
三、Demo time!!!#include
#include
#include
#include
using namespace std;
pthread_mutex_t lo;
void* thfun1(void*)
{
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?