Как удалить объект статического мьютекса

0

У меня есть мьютекс, определенный как статический и используемый двумя потоками для доступа к определенной функции. Поскольку это статично, как я должен удалить на этапе завершения? Это нормально, если я напишу следующее в деструкторе базового класса, который вызывается каждым объектом производного класса.

pthread_mutex_destroy(&m_mutex);
  • 0
    Как вы распределяете этот мьютекс? Вы вообще выделяете это?
  • 0
    Он определяется статически в базовом классе: static pthread_mutex_t m_mutex;
Показать ещё 2 комментария
Теги:
static
mutex

1 ответ

0

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

static pthread_mutex_t mutex;

struct MutexDestroyer {
  ~MutexDestroyer() {
    pthread_mutex_destroy(&mutex);
  }
};

static MutexDestroyer mutexDestroyer;

Когда mutexDestroyer уничтожен, его деструктор уничтожит мьютекс для вас.

Позже вы можете улучшить его, превратившись в полную структуру RAII, переместив в нее переменную mutex и инициализируя ее в конструкторе, а затем создайте вспомогательные функции для блокировки и разблокировки мьютекса.

  • 2
    Чтобы быть разборчивым, это НЕ Resource Acquisition Is Initialisation (RAII), так как вы не создаете мьютекс при инициализации. Еще лучше было бы объявить его внутри класса MutexDestroyer (который затем должен изменить его имя) и правильно реализовать все MutexDestroyer сопоставления объектных ресурсов. (разрешить создание мьютекса при создании, запретить копирование, разрешить перемещение и назначение, ...)
  • 0
    @LaurentLARIZZA Действительно. Я отредактировал ответ, чтобы прояснить этот момент, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню