У меня есть мьютекс, определенный как статический и используемый двумя потоками для доступа к определенной функции. Поскольку это статично, как я должен удалить на этапе завершения? Это нормально, если я напишу следующее в деструкторе базового класса, который вызывается каждым объектом производного класса.
pthread_mutex_destroy(&m_mutex);
Вы можете создать вспомогательную структуру, чтобы уничтожить ее для вас в нужное время.
static pthread_mutex_t mutex;
struct MutexDestroyer {
~MutexDestroyer() {
pthread_mutex_destroy(&mutex);
}
};
static MutexDestroyer mutexDestroyer;
Когда mutexDestroyer
уничтожен, его деструктор уничтожит мьютекс для вас.
Позже вы можете улучшить его, превратившись в полную структуру RAII, переместив в нее переменную mutex и инициализируя ее в конструкторе, а затем создайте вспомогательные функции для блокировки и разблокировки мьютекса.
MutexDestroyer
(который затем должен изменить его имя) и правильно реализовать все MutexDestroyer
сопоставления объектных ресурсов. (разрешить создание мьютекса при создании, запретить копирование, разрешить перемещение и назначение, ...)