Solaris 动态跟踪指南

读取器/写入器锁定探测器

读取器/写入器锁定强制执行允许临界段中有多个读取器单个写入器的策略,但不允许同时存在二者。这些锁定通常用于搜索操作比修改操作更频繁且临界段中具有足够的时间的结构。如果临界段时间比较短,则读取器/写入器锁定将在用于实现锁定的共享内存中隐式串行化,从而使它们无法比自适应锁定提供更大的优势。有关读取器/写入器锁定的更多详细信息,请参见 rwlock(9F)

表 18–4 中介绍了与读取器/写入器锁定有关的探测器。对于每种探测器,arg0 都包含指向代表自适应锁定的 krwlock_t 结构的指针。

表 18–4 读取器/写入器锁定探测器

rw-acquire

获取读取器/写入器锁定之后将立即触发的暂挂事件探测器。如果作为读取器获取锁定,则 arg1 将包含常量 RW_READER,如果作为写入器获取锁定,则将包含常量 RW_WRITER

rw-block

在暂挂的读取器/写入器锁定上阻塞的线程重新唤醒并获取锁定之后,将触发的争用事件探测器。arg1 包含当前线程要获取锁定必须休眠的时间长度(以纳秒为单位)。如果作为读取器获取锁定,则 arg2 将包含常量 RW_READER,如果作为写入器获取锁定,则将包含常量 RW_WRITERarg3arg4 包含有关阻塞原因的更多信息。在当前线程阻塞的情况下,只有在作为写入器暂挂锁定时,arg3 才不为零。arg4 包含当前线程阻塞时的读取器计数。如果 rw-blockrw-acquire 探测器都已启用,则 rw-block 将在 rw-acquire 之前触发。

rw-upgrade

在线程已成功将读取器/写入器锁定从读取器升级到写入器之后,将触发的暂挂事件探测器。升级没有关联的争用事件,因为仅可以通过非阻塞接口 rw_tryupgrade(9F) 进行升级。

rw-downgrade

在线程将其读取器/写入器锁定的拥有权从写入器降级到读取器之后,将触发的暂挂事件探测器。降级没有关联的争用事件,因为降级在没有争用的情况下始终会成功。 

rw-release

释放读取器/写入器锁定之后,将立即触发的暂挂事件探测器。如果作为读取器暂挂释放的锁定,则 arg1 将包含常量 RW_READER,如果作为写入器暂挂释放的锁定,则将包含常量 RW_WRITER。由于升级和降级,获取锁定时,锁定可能并没有释放。