Рекурсивные мутексы
От: SergH Россия  
Дата: 23.07.12 14:04
Оценка:
Привет,

Есть проектик в котором используются мутексы, обычные, не рекурсивные. Инициализируются через PTHREAD_MUTEX_INITIALIZER. Используются аккуратно: сами мутексы завернуты с сиплюсовый класс, и локер идёт отдельным классом, в конструкторе блокирует, в деструкторе отпускает. Всё работает, проблем нет, дедлоков нет. pthread_mutex_trylock не используется нигде.

Понадобилось в одном месте сделать рекурсивную блокирвку. Ну, не долго думая, переделал в классе мутекса инициализацию. Больше ничего не менял. Оба-на! Всё нахрен сломалось. Ладно, сделал на всякий случай трассировку локов-анлоков -- с трассировкой работает Поэтому уточнить что именно сломалось мне пока сложно, нужна какая-то диагностика. Не крашится.

Как такое может быть вообще? По идее я добавил мутексам возможность, которая, по идее, нигде не используется. Так как иначе это были бы дедлоки. То есть поведение не должно было меняться вообще никак. А оно тем не менее изменилось радикально.

ОС — Убунта. Проблему в итоге решил иначе, без рекурсивных мутексов.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.