LINUX.ORG.RU

двойной pthread_mutex_lock


0

1

Столкнулся с задачкой. В программе есть главный поток и определенное кол-во других потоков. Главный поток инициализирует всю работу, затем делает pthread_mutex_lock(&work_mutex). Далее делает повторно pthread_mutex_lock(&work_mutex) чтобы ожидать разблокировку. Если какому-либо потоку понадобится чтобы программа корректна завершилась, то он сделает pthread_mutex_unlock(&work_mutex), тем самым разблокирует работу главного потока, который корректно всё завершит. Переменная work_mutex - глобальная.

В доках написано, что такое нельзя делать т.к. по мнению системы происходит взаимная блокировка (функция вернет EDEADLK). Но так как на деле ни в одном из используемых дистрибутивов Linux данная ошибка не появлялась, то было решено использовать вышеописанный код. Но пришлось портировать программу на FreeBSD, а вот там как раз и словил данную ошибку (EDEADLK).

Как можно вообще всё это более менее корректно реализовать?


> Как можно вообще всё это более менее корректно реализовать?

man sem_init
man sem_wait
man sem_post

arsi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.