class MyClass
{
...
...
CCriticalSection m_Cs;
void MyFunction()
{
m_Cs.Lock();
.....
m_Cs.Unlock();
}
MyClass::~MyClass()
{
....
}
};
如上所述,我在我的类中使用关键部分,myFunction 由线程 1 调用,当 myFunction 正在进行时,线程 2 正在删除对象。所以Unlock崩溃了。
所以我决定修改 MyClass 析构函数如下
MyClass::~MyClass()
{
m_Cs.Lock();
m_Cs.Unlock();
....
}
这解决了我的崩溃,因为当线程 1 访问 MyFunction 时,CriticalSection 被锁定,所以当从线程 2 中删除对象时,析构函数中的 CriticalSection.Lock 被阻塞,直到从 MyFunction 调用解锁。从析构函数中锁定和解锁 CriticalSection 以避免这种崩溃是正确的行为吗?