pthreads是否支持查询递归互斥锁的“锁定计数”的方法?

时间:2009-11-11 21:12:12

标签: pthreads mutex recursive-mutex

pthreads是否支持任何允许您查询递归互斥锁被锁定次数的方法?

2 个答案:

答案 0 :(得分:3)

没有官方的,可移植的方式来做到这一点。

您可以通过自己跟踪锁定计数来轻松获得此行为 - 可能是通过为锁定和解锁函数编写包装器,以及使用互斥锁创建结构并将其计为成员。

答案 1 :(得分:0)

您可以使用第二个互斥锁来完成此操作,例如计数互斥。

然后代替pthread_mutex_lock:

pthread_mutex_lock(&counting_mutex);
pthread_mutex_lock(&my_mutex);
pthread_mutex_unlock(&counting_mutex);

代替pthread_mutex_unlock:

pthread_mutex_lock(&counting_mutex);
pthread_mutex_unlock(&my_mutex);
pthread_mutex_unlock(&counting_mutex);

然后您可以添加pthread_mutex_count:

int count = 0, i = 0;
pthread_mutex_lock(&counting_mutex);
while (!pthread_mutex_unlock(&my_mutex)) count++;
while (i++ < count) pthread_mutex_lock(&my_mutex);
pthread_mutex_unlock(&counting_mutex);
return count;