我在这里运行一些线程安全的代码。我正在使用互斥锁来保护仅需要一次仅由1个线程运行的代码段。我遇到的问题是使用此代码,有时我会遇到2个Mutex对象。顺便说一下,这是一个静态函数。如何确保仅创建1个互斥对象?

/*static*/ MyClass::GetResource()
{

if (m_mutex == 0)
{
// make a new mutex object
m_mutex = new MyMutex();
}

m_mutex->Lock();

最佳答案

只需在m_mutex之外创建GetResource(),,然后再调用它即可-删除了实际创建互斥锁的关键部分。

MyClass::Init()
{
  m_mutex = new Mutex;
}

MyClass::GetResource()
{
  m_mutex->Lock();
  ...
  m_mutex->Unlock();
}

10-07 16:12
查看更多