Назад к вопросам
Junior — Middle
79
Какой вид мьютекса допускает повторное захватывание одним и тем же потоком без возникновения взаимной блокировки?
Ответ от нейросети
sobes.tech AI
Вид мьютекса, который допускает повторное захватывание одним и тем же потоком без возникновения взаимной блокировки, называется рекурсивным мьютексом (recursive mutex).
Особенность рекурсивного мьютекса в том, что если поток уже владеет этим мьютексом, он может захватывать его повторно без блокировки. При этом счетчик захватов увеличивается, и мьютекс освобождается только после соответствующего количества вызовов освобождения.
В POSIX pthreads это реализуется с помощью атрибута PTHREAD_MUTEX_RECURSIVE:
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, &attr);
Такой мьютекс удобен, когда один и тот же поток может войти в критическую секцию рекурсивно, например, при вызове вложенных функций, требующих синхронизации.