Linux:线程同步之互斥锁(互斥锁的本质、互斥锁的作用、如何使用互斥锁实现线程同步)

互斥锁

(1)What(什么是互斥锁)

本质是一个对象,实现对临界区的串行访问(互斥访问)

(2)Why(互斥锁的用途)

互斥锁的用途:实现多线程对共享资源的先后访问

(3)How(如何使用互斥锁)

在Linux中,使用互斥锁机制对共享资源的先后访问顺序如下:定义互斥锁对象、初始化互斥锁对象、关锁、开锁、销毁锁…

step01:定义互斥锁

相当于创建互斥量对象

pthread_mutex mutex;

step02:初始化互斥锁

相当于初始化对象

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
  • 参数mutex:待初始化的互斥量对象
  • 参数attr:用于指定互斥锁的属性。如果为 NULL,则使用默认属性
  • 返回值:初始化成功返回0,否则初始化失败

step03:关锁

本质是调用操作互斥锁对象mutex的一个关锁函数,其它线程在访问该共享资源时,如果互斥锁变量属于关锁状态,则将会被阻塞

int pthread_mutex_lock(pthread_mutex_t  *mutex);
  • 参数mutex:互斥锁对象的地址
  • 返回值:成功关锁(表示成功获取互斥锁变量)返回0,否则返回非0

Note:当锁处于开状态时,调用该函数会改变mutex的状态为关,并记录哪个线程对它上的锁
当锁处于关状态时,调用该函数会失败,这些调用失败的线程都会阻塞在这把互斥锁对象上

step04:开锁

本质时调用操作互斥锁对象mutex的一个开锁函数,当获取该互斥锁的对象完成了对共享资源的访问时调用

int pthread_mutex_unlock(pthread_mutex_t *mutex);
  • 参数mutex:被开始的互斥锁对象
  • 返回值:0表示开锁成功

step05:销毁锁

本质就是释放互斥锁对象,将资源归还给操作系统

int pthread_mutex_destroy(pthread_mutex_t *mutex);
  • 参数mutex:被销毁的互斥锁对象
  • 返回值:0表示销毁成功
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值