小编Twi*_*cle的帖子

C++条件语句是否带有从条件表达式到语句的依赖?

我在内存模型意义上具体要求.http://en.cppreference.com/w/cpp/atomic/memory_order

我问,因为我想知道我是否可以使用std::memory_order_consume以下内容:

mLocalMemPtr1和2以及mAtomicMemPtr是指向共享缓冲区的指针.

在我正在做的生产者线程中:

for (int x = 0; x < 10; ++x)
{
    ++mLocalMemPtr1
    *mLocalMemPtr1 = x;       // <========= A
    mAtomicMemPtr.store(mLocalMemPtr1, std::memory_order_release);
}
Run Code Online (Sandbox Code Playgroud)

在消费者中:

tempMemPtr = mAtomicMemPtr.load(std::memory_order_consume);
while (tempMemPtr != mLocalMemPtr2)
{
    ++mLocalMemPtr2;
    int test = *mLocalMemPtr2;   // <======== B
    doSomeLongRunningThing(test);
    tempMemPtr = mAtomicMemPtr.load(std::memory_order_consume);
}
Run Code Online (Sandbox Code Playgroud)

那么依赖链是tempMemPtr - > mLocalMemPtr2 - > test - > doSomeLongRunningThing吗?

我特别担心B以前可能会被执行A.我知道我可以使用a std::memory_order_acquire,但如果条件语句导致内存顺序依赖,我可以使用consume(更轻量级).

c++ memory-model c++11

6
推荐指数
1
解决办法
546
查看次数

标签 统计

c++ ×1

c++11 ×1

memory-model ×1