互斥锁、死锁以及如何预防、避免、检测、解除死锁

本文介绍了互斥锁的概念,包括其基本原理、初始化、申请和释放方法。接着讨论了死锁的发生原因和四个必要条件,并提出预防、避免和解除死锁的策略,如资源一次性分配、避免环路等待等。最后提到了检测和解除死锁的方法。
摘要由CSDN通过智能技术生成

一、互斥锁:


1、互斥锁基本原理:
     互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。
     (1)访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。
     (2)只有锁定该互斥锁的进程才能释放该互斥锁,其他线程试图释放无效。
2、初始化互斥锁:
     使用之前,需要定义互斥锁,使用函数:pthread_mutex_t lock;进行定义。
     初始化锁:
     extern int    pthread_mutex_init(pthread_mutex_t *_mutex,_const pthread_mutex_mutexattr_t* _mutexattr)
          第一个参数mutex指要初始化的互斥锁的指针。
          第二个参数mutexattr是指向对象的指针,如果该属性为空,则使用默认的属性。
          全用宏PTHREAD_MUTEX_INITIALIZER来初始化静态分配的互斥锁(全局锁);
3、申请互斥锁
     如果一个线程要占用共享资源,必须先申请对应互斥锁,使用函数:
exter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值