Поддерживает ли 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;
Другие вопросы по тегам