Linux mutex用法和原理分析

零、什么是mutex

mutex is a mutual exclusion lock. Only one thread can hold the lock.

A mutex can be used to prevent the simultaneous execution of a block of code by multiple threads that are running in a single or multiple processes.

Mutex is used as a synchronization primitive in situations where a resource has to be shared by multiple threads simultaneously.

A mutex has ownership. The thread which locks a Mutex must also unlock it.

一、mutex的使用套路
1.mutex实例对象创建
    struct mutex mutex;
2.初始化multex
    mutex_init(&globalmem_devp->mutex);
3.用锁保护资源
    mutex_lock(&dev->mutex);
    memset(dev->mem, 0, GLOBALMEM_SIZE);
    mutex_unlock(&dev->mutex);
二、实际上mutex_lock/mutex_unlock的实现
    依赖于对mutex->count变量的原子操作

三、原子操作如何实现?
SMP系统中,在C的软件层面上,是不能保证原子性的,那么只有在硬件层面上去保证,庆幸的是armv6及以上的版本支持strex和ldrex指令来保证多核之间的数据同步和控制并发问题。
https://blog.csdn.net/weixin_33975951/article/details/86000607
同样的,X86-64平台也有类似的指令,可以用于实现原子操作,比如:LOCK指令。

通过ldrex与strex指令来保证数据操作的原子性
#define ATOMIC_OP_RETURN(op, c_op, asm_op)                \
static inline int atomic_add_return(int i, atomic_t *v)        \
{                                    \
    unsigned long tmp;                        \
    int result;                            \
                                    \
    smp_mb();                            \
    prefetchw(&v->counter);                        \
                                    \
    __asm__ __volatile__("@ atomic_add_return\n"        \
"1:    ldrex    %0, [%3]\n"                        \
"    " #asm_op "    %0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

denglin12315

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值