Я смотрю на код в учебнике: Программирование с использованием потоков POSIX Дэвида Р. Бутенхофа, и я наткнулся на место, которое немного смущает меня.
В коде обработчик очистки зарегистрирован для потока. Обработчик очистки разблокирует мьютекс, который используется условием в этом потоке.
В потоках в genereal, когда вызывается pthread_cond_wait (с соответствующим мьютексом, заблокированным, как и должно быть), мьютекс разблокируется, пока поток ожидает, - затем он повторно запрашивается, когда условие ожидания закончено, прежде чем он возвращается (т.е. произошел сигнал или трансляция).
Поскольку во время ожидания условие_свит не блокирует мьютекс, я бы подумал, что если бы поток был отменен во время ожидания, он все равно не заблокировал бы этот мьютекс - так зачем обработчику очистки его освобождать?
На самом деле, я думал, что разблокировка мьютекса, который уже был разблокирован, на самом деле была ошибкой, что ухудшало ситуацию. Может кто-нибудь сказать мне, где вы думаете, что я в замешательстве?