可以将操作重新排序到memory_order_release之前
can operation reorder to before memory_order_release?
y.store
可以重新排序到x.store
之前吗?因为该标准说任何原子操作发生在memory_order_release
之前,不能重新排序到memory_order_release
之后,但没有说明任何操作发生在memory_order_release
之后,不能重新排序到memory_order_release
之前。
如果我能发生,那么 C++ 并发操作手册中的示例 5.12 示例是错误的吗?
std::atomic<bool> x,y;
std::atomic<int> z;
void write_x_then_y()
{
x.store(true,std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_release);
y.store(true,std::memory_order_relaxed);
}
该标准没有根据操作如何围绕它们进行排序来定义内存围栏。
它定义在满足正确条件时释放围栏(或操作)如何与获取围栏(或操作)同步。
在您的示例中,如果获取操作观察 y
存储的值,则保证它也观察 x
存储的值。在这些条件下,要x
的商店先于商店y
。
除此之外,很难推测围栏如何强加秩序,因为在假设规则下可能会发生很多事情。
相关文章:
- Python ctype 'c_char_p' Memory Leak
- Ascending order c++
- 模式"allocate memory or use existing data"
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- C++ "Using Uninitialized Memory.. (variable name) "
- "Memory Fragmentation"这仍然是一个问题?
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- 向量数组"Cannot access memory at address"
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- 我在 C++ "out_of_range at memory location"有问题
- QML QQmlPropertyList - 包含的对象生存期和'memory rules'
- Java 本机访问代码错误:"Invalid memory access"
- 编写"anti-lack of memory"异常安全代码
- 什么__asm挥发性("pause" ::: "memory");男孩
- "static initialization order fiasco"是 constexpr 变量的问题吗?
- 在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 如何修复代码中的"Invalid memory reference"错误?