linux 内核的rt_mutex 锁操作实现的临界区

rt_mutex 定义的锁规则:

以偶对齐的task_struct指针为上锁标记,

偶对齐的指针地址最低位用以标记是否有waiters。

 

rt_mutex的trylock,lock,以及unlock都有fastpath,只用原子变量操作保护并发,并且保证状态转换的前后依赖。

当WAITERS标记位为1时,trylock,lock以及unlock的fastpath都会失效,强迫进入slowpath采用临界区同步。

还有owner已经写上其它task的指针,trylock,lock的fastpath都会失效,强迫进入slowpath采用临界区同步,但不会在fastpath直接将WAITERS标记位标记为1。

当多个线程同时对一个锁进行竞争时,它们的slowpath都必须同步在临界区中,产生额外的开销。trylock不得不与其它lock进行临界区的同步,rt_mutex的trylock的开销其实也不小。当rt_mutex用作pi-futex的委托时,对pi-futex进行trylock,同样也就摊上了不小的开销。

虽然对当前rt_mutex锁进行lock wait或unlock引起的chain walk and adjust priority不会与当前rt_mutex锁同步在相同的临界区,但是那些阻塞在当前rt_mutex锁的waiters持有的锁上引发的chain walk and adjust priority,就会进入临界区同步。临界区都由rt_mutex->wait_lock进行同步。

转载于:https://www.cnblogs.com/bbqzsl/p/6782525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值