gpt4 book ai didi

c++ - std::atomic 的正确用法

转载 作者:太空狗 更新时间:2023-10-29 19:52:45 24 4
gpt4 key购买 nike

这是使用 std::atomic 的正确方法吗?我有一个在名为 LOGGER 的 namespace 级别声明的 Logger:

class Logger {
public:

Logger();
~Logger();

bool Init(std::wstring logFileLocation);
bool Shutdown();

void const LogMessage(std::wstring message);
};

std::atomic<Logger&> LOGGER;

我的期望是 LOGGER 将实例化一次(无竞争;它将从代码中的单个已知点初始化),然后从多个线程访问。

我是 C++ 中多线程和线程安全的新手;但在 C# 或 Java 中,我想使 LOGGER volatile 或(在 C# 中)在它周围放置内存栅栏。这是 C++ 中的正确模拟吗?

最佳答案

std::atomic<T>atomic 中定义的操作提供同步模板。这包括存储 T 类型的值, 获取类型 T 的值, 交换 T 类型的值与 T在原子对象中,以及一些比较和交换操作。它不是替代对所包含对象的正确同步操作。特别是,调用 LogMessage如果 LogMessage,来自多个线程将产生数据竞争不使用互斥体保护其数据。

关于c++ - std::atomic 的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com