30 Окт в 09:26
4 +1
0
Ответы
1
Вызов `pthread_mutex_lock(&b)` пытается захватить мьютекс `b`:
- Если мьютекс свободен — текущий поток заполняет его и функция возвращает 000.
- Если мьютекс занят другим потоком — текущий поток блокируется до освобождения мьютекса (в отличие от `pthread_mutex_trylock`, которая не блокирует).
- Если мьютекс уже захвачен этим же потоком:
- для типа `PTHREAD_MUTEX_RECURSIVE` счётчик захватов увеличивается (разблокировать нужно столько же раз);
- для `PTHREAD_MUTEX_ERRORCHECK` функция вернёт ошибку EDEADLKEDEADLKEDEADLK;
- для `PTHREAD_MUTEX_DEFAULT` обычно возникнет дедлок (поток будет ждать сам себя).
- Для робастных (robust) мьютексов, если предыдущий владелец умер, может вернуться EOWNERDEADEOWNERDEADEOWNERDEAD — тогда нужно восстановить состояние и вызвать `pthread_mutex_consistent`.
- Возможная синтетическая ошибка: если `b` не инициализирован или недействителен — EINVALEINVALEINVAL.
После успешного захвата нужно вызвать `pthread_mutex_unlock(&b)` для освобождения. Убедитесь, что мьютекс корректно инициализирован перед использованием.
30 Окт в 09:44
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир