互斥锁与死锁简单介绍(转)

本文通过示例介绍了互斥锁的概念,展示了如何使用互斥锁防止数据竞争。同时,讨论了死锁的发生条件和预防策略,包括资源一次性分配、可剥夺资源和资源有序分配法。此外,还提到了避免死锁的银行家算法以及检测和解除死锁的方法。
摘要由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、申请互斥锁
     如果一个线程要占用共享资源,必须先申请对应互斥锁,使用函数:
extern int pthread_mutex_lock(pthread_mutex* _mutex)以阻塞方式申请互斥锁;
extern int pthread_mutex_trylock(pthread_mutex* _mutex)以非阻塞方式申请互斥锁;
    若申请成功,返回0,否则,返回一个错误编号。
     <注:参数都是要申请互斥锁的指针>
4、释放互斥锁
     释放互斥锁用函数:
     extern int pthread_mutex_unlock(pthread_mutex_t* _mutex)
     参数mutex是指向要解锁的互斥锁的指针
     释放只能由占有该互斥锁的线程完成,如果释放成功,返回0,失败返回错误编号。
     unlock中的释放锁操作同样只用一条指令实现,以保证它的原子性。
5、例:如下代码:
[cpp]  view plain   copy
  1. #include<stdio.h>  
  2. #include<pthread.h>  
  3. #include<string.h>  
  4. #include<sys/types.h>  
  5. #include<unistd.h>  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值