如何删除静态互斥对象

How to delete a static mutex object

本文关键字:静态 对象 删除 何删除      更新时间:2023-10-16

我有一个互斥锁定义为静态的,由两个线程使用,以便访问某些函数。由于它是静态的,在定稿阶段应该如何删除?如果我在每个派生类对象调用的基类析构函数中编写以下内容是否可以。

pthread_mutex_destroy(&m_mutex);

您可以创建一个帮助程序结构,在正确的时间为您销毁它。

static pthread_mutex_t mutex;
struct MutexDestroyer {
  ~MutexDestroyer() {
    pthread_mutex_destroy(&mutex);
  }
};
static MutexDestroyer mutexDestroyer;

mutexDestroyer被销毁时,它的析构函数将为您销毁互斥锁。

稍后,您可以将其改进为完整的 RAII 结构,将互斥体变量移动到该变量并在构造函数中对其进行初始化,然后创建帮助程序函数来锁定和解锁互斥体。