i.MX6ULL终结者线程同步互斥锁

互斥锁的作用是锁住共享资源,线程在操作共享资源时,保证这个资源不被其他线程改变,锁住的是数据而不是线程。
互斥锁保护临界区的方式是只让一个线程持有锁,没有拿到这个锁的线程将会阻塞,即保证临界区的互斥,对共享资源的操作具有原子性。
使用互斥机制要避免死锁,死锁产生的情况是:1线程拿着A锁,然后阻塞住想获取B锁,2线程拿着B锁,阻塞想获取A锁,这样两个线程都会阻塞住,等待拿不到的锁,就这样造成死锁,程序不能往下执行。
使用互斥锁的步骤:
1.在全局区定义互斥锁,静态分配是将PTHREAD_MUTEX_INITIALIZER赋值给互斥锁,动态分配使用pthread_mutex_init;
2.初始化互斥锁;
3.加锁解锁;
4.如果是动态分配的锁要使用pthread_mutex_destroy销毁,静态分配的不用pthread_mutex_destroy销毁。
常用函数如下:
pthread_mutex_init():动态分配互斥锁,
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex);
参数含义:mutex,定义的互斥量
返回值:成功返回0,失败返回错误号。

pthread_mutex_lock():如果互斥锁处于未锁定状态,使用此函数加锁,程序继续执行;如果锁被别的地方锁住,此函数就会阻塞等待。
int pthread_mutex_lock(pthread_mutex_t *mutex);
参数含义:mutex,已经初始化的锁。
返回值:成功返回0,锁被占用会阻塞线程。

pthread_mutex_unlock():解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
参数含义:mutex,已经上过锁的互斥锁对象。
返回值:成功返回0,失败返回错误码。

互斥锁实验和条件变量一起做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值