相关疑难解决方法(0)

std :: atomic <std :: string>是否正常工作?

我正在阅读Anthony Williams的"行动中的C++并发"和第5章,其中讨论了新的多线程感知内存模型和原子操作,并指出:

为了std::atomic<UDT>用于某些用户定义的UDT类型,此类型必须具有普通的复制赋值运算符.

据我了解,这意味着std::atomic<UDT>如果以下内容返回true ,我们可以使用:

std::is_trivially_copyable<UDT>::value
Run Code Online (Sandbox Code Playgroud)

通过这种逻辑,我们不应该使用它std::string作为模板参数std::atomic并使其正常工作.

但是,以下代码使用预期输出进行编译和运行:

#include <atomic>
#include <thread>
#include <iostream>
#include <string>

int main()
{
    std::atomic<std::string> atomicString;

    atomicString.store( "TestString1" );

    std::cout << atomicString.load() << std::endl;

    atomicString.store( "TestString2" );

    std::cout << atomicString.load() << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个未定义的行为,恰好按预期行事吗?

提前致谢!

c++ atomic stdstring stdatomic

44
推荐指数
2
解决办法
2万
查看次数

标签 统计

atomic ×1

c++ ×1

stdatomic ×1

stdstring ×1