我的应用程序中有一个带有设置的模块,其中每个参数由std::atomiс. 现在我开始将每个这样的参数设置为 memory_order ,例如,而不是station_id_写入station_id_.load(std::memory_order_relaxed). 因为 代码中有很多这样的调用,代码开始非常臃肿。C++ 中是否有一些机制允许您在初始化 std::atomic 对象时设置 memory_order?
我的应用程序中有一个带有设置的模块,其中每个参数由std::atomiс. 现在我开始将每个这样的参数设置为 memory_order ,例如,而不是station_id_写入station_id_.load(std::memory_order_relaxed). 因为 代码中有很多这样的调用,代码开始非常臃肿。C++ 中是否有一些机制允许您在初始化 std::atomic 对象时设置 memory_order?
这是被禁止的。因为原子对象没有默认顺序。特定操作有一个默认顺序,它被硬连线到相应函数的接口中。当然,默认的始终是在使用这些操作时不会让用户感到惊讶的命令。
除了顺序一致性之外的任何顺序都不应该是默认顺序。产生非直觉的行为。因此,创建一个
std::atomic允许更改默认行为的类是没有意义的。此外,load(std::memory_order_relaxed)这不是代码混乱和信息噪音,相反,它是一个很好的指标,表明代码可能值得仔细研究。但是,如果您隐藏所有这些,那么 [可以] 寻找与多线程相关的错误的专家将根本不会注意到没有同步。