不同C库中原子操作之间的兼容性

时间:2014-10-16 17:28:59

标签: c multithreading gcc atomic c11

两个线程(生产者和消费者)之间的经典同步习惯涉及

  • 生产者更新共享内存中的值(global_variable),然后使用发布语义更新原子标记(flag)。在C11中,生产者代码可以写成如下:

    global_variable = 0; 
    atomic_store_explicit(&flag, 1, memory_order_release); // flag is an integer
    
  • 消费者等待flag的值变为1,然后阅读global_variable。如果使用GCC原子库编写了消费者,它将如下所示:

    while (__atomic_load_n(&flag, __ATOMIC_ACQUIRE) != 1; // loop until flag enabled
    // read value of global_variable 
    

如果消费者代码是使用显式C11原子加载编写的,我们希望程序是正确的...但是GCC"等效"代码保证也可以工作?换句话说,问题变成:在不同库中定义的原子操作是否兼容? GCC atomics documentation对这方面含糊不清:

  

以下内置函数大致符合C ++ 11内存模型的要求

0 个答案:

没有答案