互斥强制临界段相互排斥。当线程尝试使用 mutex_lock(3C) 或 pthread_mutex_lock(3C) 获取另一个线程暂挂的互斥时,它将确定拥有线程是否正在其他 CPU 中运行。如果是这样,获取线程将旋转一段时间,以等待互斥可用。如果属主未在另一个 CPU 上运行,获取线程将阻塞。
表 31–1 中列出了与互斥有关的四个 plockstat 探测器。对于每一个探测器,arg0 包含指向代表互斥的 mutex_t 或 pthread_mutex_t 结构(这些结构的类型相同)的指针。
表 31–1 互斥探测器
mutex-acquire |
获取互斥之后将立即触发的暂挂事件探测器。arg1 包含布尔值,用于指示获取操作对于递归互斥是否是递归的。arg2 表示获取线程在此互斥上旋转的重复次数。仅当在获取此互斥时触发 mutex-spin 探测器,arg2 才将为非零值。 |
mutex-block |
线程在暂挂互斥上阻塞之前将触发的争用事件探测器。单次锁定获取可能会同时触发 mutex-block 和 mutex-spin。 |
mutex-spin |
线程开始在暂挂互斥上旋转之前将触发的争用事件探测器。单次锁定获取可能会同时触发 mutex-block 和 mutex-spin。 |
mutex-release |
释放互斥之后将立即触发的暂挂事件探测器。arg1 包含布尔值,用于指示事件是否对应于递归互斥上的递归释放。 |
mutex-error |
互斥操作中遇到错误时将触发的错误事件探测器。arg1 是遇到的错误的 errno 值。 |