pthreads是否支持任何允许您查询递归互斥锁被锁定次数的方法?
答案 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;