我在这里运行一些线程安全的代码。我正在使用互斥锁来保护仅需要一次仅由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();
}