c++ - 实现 atomic<T>::store

标签 c++ c++11 std stdatomic

我正在尝试实现 C++0x 草案中的原子库。具体来说,我正在实现 §29.6/8,store 方法:

template <typename T>
void atomic<T>::store(T pDesired, memory_order pOrder = memory_order_seq_cst);

要求说明:

The order argument shall not be memory_order_consume, memory_order_acquire, nor memory_order_acq_rel.

如果是其中之一,我不确定该怎么办。我应该什么都不做、抛出异常、出现未定义的行为,还是做其他事情?

附言:“C++0X”看起来有点像死鱼 :3

最佳答案

随心所欲。没关系。

当 ISO 声明您“不得做某事”时,这样做是未定义的行为。如果用户这样做,他们就违反了与实现的契约(Contract),而实现在其权利范围内为所欲为。

你决定做什么完全取决于你。我会选择让您的实现“更好”的任何东西(在您看来,速度更快、可读性更强、符合最少惊讶原则等)。

我自己,我会追求可读性(因为我必须维护它),速度紧随其后。

关于c++ - 实现 atomic<T>::store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732395/

相关文章:

c++ - 将包含 C 样式数组的对象初始化为成员变量 (C++)

c++ - 如何在 C++11 中多线程读取文件?

c++ - 使用模板创建子类

c++ - 加载共享库 : libstdc++. so.6 时出错:错误的 ELF 类:ELFCLASS64

c++ - 变量 ' ' 周围的堆栈已损坏

c++ - 更改二进制文件

c++ - 将右值引用传递给 boost::in_place 函数

c - C 中的函数 strtol 超出范围...或不

c++ - 令人信服的自定义 C++ 分配器示例?

c++ - 如何使用 boost 从多个 regex-en 组合一个 regex