Junior — Middle
Welche Art von Mutex erlaubt es demselben Thread, es erneut zu ergreifen, ohne eine gegenseitige Sperrung zu verursachen?
sobes.tech KI
Antwort von 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);
Такой мьютекс удобен, когда один и тот же поток может войти в критическую секцию рекурсивно, например, при вызове вложенных функций, требующих синхронизации.