Подтвердить что ты не робот

Правильно ли блокировать мьютекс pthread, прежде чем уничтожить его?

class AAA
{
    ...
    ~AAA()
    {
        pthread_mutex_lock( &m_mutex );
        pthread_mutex_destroy( &m_mutex );
    }
}

Вопроs > Я видел этот код где-то в проекте. Это хорошая практика? Или это поведение undefined для блокировки мьютекса, прежде чем уничтожить его?

4b9b3361

Ответ 1

Это поражает меня как совершенно ужасную практику.

из http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html

Безопасно уничтожить инициализированный мьютекс, который разблокирован. Попытка уничтожить заблокированный мьютекс приводит к поведению undefined.

поэтому этот код гарантирует поведение undefined и его необходимо устранить.

Ответ 2

Эта ссылка описывает ее поведение undefined.

Возможно, с того места, где вы видели этот код, оригинальный кодер хотел уничтожить мьютекс и мог подумать, что если он/она сможет заблокировать этот мьютекс, то это означает, что он разблокирован где-то еще каким-то важным потоком и, следовательно, он может удалить его.

Но он реализован неправильно.