Неинициализированный мьютекс выходит из области видимости - очистка? - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь очистить чужой код и вижу много случаев, когда класс содержит pthread_mutex_t переменную-член. В ряде случаев pthread_mutex_init() никогда не вызывается и не блокируется / разблокируется. Когда этот объект выходит из области видимости, что, если что-нибудь, нужно сделать, чтобы правильно очистить после него? Могу ли я попытаться разблокировать его (если он не был init'd, что происходит)? Нужно ли его уничтожать?

Инструмент анализа говорит, что ресурс может быть потерян. Что-нибудь потеряно?

1 Ответ

1 голос
/ 26 января 2012

Если вы выполняете очистку и обнаруживаете мьютекс, который никогда не используется, вам следует подумать об его удалении.

Если используется мьютекс, вы должны позвонить pthread_mutex_destroy(). Деструктор класса - хорошее место для этого, особенно если в конструкторе вызывается pthread_mutex_init().

Обратите внимание, что мьютекс должен быть разблокирован к моменту его уничтожения, иначе будет получено неопределенное поведение. Это должно быть обеспечено тем, как используется мьютекс.

...