zoukankan      html  css  js  c++  java
  • 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进行同步。

  • 相关阅读:
    联考20200520 T2 函数
    联考20200520 T1 石子游戏
    模拟赛T2 中继系统
    模拟赛T2 仙人掌毒题
    BZOJ3462 DZY Loves Math II
    20200129模拟赛T1 string
    BZOJ1316 树上的询问
    BZOJ4559 成绩比较
    JZOJ4238 纪念碑
    BZOJ 2648 世界树
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/6782525.html
Copyright © 2011-2022 走看看