Поддерживает ли pthreads метод запроса "счетчика блокировок" рекурсивного мьютекса?
Поддерживает ли pthread какой-либо метод, который позволяет запрашивать количество блокировок рекурсивного мьютекса?
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;