5

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

4

2 回答 2

5

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

您可以通过自己跟踪锁定计数来获得这种可移植的行为——也许通过为锁定和解锁函数编写包装器,并创建一个带有互斥锁和计数作为成员的结构。

于 2009-11-19T04:23:02.417 回答
1

您可以使用第二个互斥锁,例如counting_mutex。

然后代替 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;
于 2019-10-26T13:28:39.420 回答