struct rw_semaphere
{
atomic_long_t count;
atomic_long_t owner;
xxxx
xxxx
}
结构体定义如上,通常我们在进行确认当前信号量持锁情况需要进行初步分析下count 跟 owner情况。
count 成员是按照比特位进行划分说明:
| 比特位范围 | 含义 |
| bit 0 | 写锁标志位(rwwem_writer_master),若bit0为1,表示当前写着持锁,若为0,表示无写者持有锁 |
| bit1 | 等待队列标志位(rwsem_flag_writers),若bit1为1,表示有读者或者写者正在等待队列中,若为0,表示等待队列为空 |
| bit2 | 锁转交标志位,为1,表示锁处于转交状态(即已有预定的持锁者,其他线程无法抢占),若为0,表示锁可正常竞争。 |
| bit3-7 | 保留位,暂时预留 |
| bit8-62 | 读者计数器,记录当前持有读锁的读者数量,(最多支持55位,即2^55个读者) |
| bit63 | 读溢出保护位,为1,表示读者数量过多导致异常(异常状态,禁止新读者进入),正常情况为0 |
onwer 是基于bit0 进行说明确认。
如果bit0 为1 ,那么owner是写者对应的地址。
如果bit0 为0, 由于多个读者可以持锁特性,不需要说明,如果是分析问题,可以通过crash 的 feach 进行挨着分析每个读者。

2370

被折叠的 条评论
为什么被折叠?



