以为原子指针不会崩溃,但实际发生了,究其原因还是原子指针只能保证其自身是线程安全的,它不能保证它函数之外的代码可以线程安全。
class MyClassAtomic
{
public:
MyClassAtomic()
{
};
~MyClassAtomic()
{
};
static MyClassAtomic* instance()
{
static MyClassAtomic* pIns = nullptr;
if (pIns == nullptr)
{
pIns = new MyClassAtomic();
}
return pIns;
}
void setStr(std::string* pstr)
{
auto pPtrStr = new QSharedPointer<std::string>(pstr);
auto pOldStr = atomicPtr.fetchAndStoreRelaxed(pPtrStr);
delete pOldStr;
}
QSharedPointer<std::string> getStr()
{
return *atomicPtr.loadRelaxed();
}
private:
QAtomicPointer<QSharedPointer<std::string>> atomicPtr;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyClassAtomic::instance();
std::thread t1([]()
{

文章讲述了在C++中使用原子指针`QAtomicPointer`处理线程安全问题时,由于没有正确管理外部共享资源,导致竞态条件引发异常的实例。
最低0.47元/天 解锁文章
1310





