26 Мая в 10:12
23 +1
0
Ответы
1
Нужно разблокировать мьютекс и корректно инициализировать/проверять ошибки. Если поток выйдет без `pthread_mutex_unlock`, получится блокировка (deadlock).
Пример корректной реализации:
void *worker(void *arg) {
/* предположим, m инициализирован: pthread_mutex_init(&m, NULL); */
if (pthread_mutex_lock(&m) != 0) {
/* обработка ошибки */
return NULL;
}
/* критическая секция */
/* ... */
pthread_mutex_unlock(&m);
return NULL;
}
Советы:
- Инициализируйте мьютекс до создания потоков: `pthread_mutex_init(&m, NULL);`.
- Обрабатывайте коды возврата `pthread_mutex_lock`/`unlock`.
- Для корректного разблокирования при отмене используйте `pthread_cleanup_push`/`pthread_cleanup_pop` или RAII-подобную обёртку.
26 Мая в 10:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир