“弱”原子操作?

时间:2013-03-12 15:56:27

标签: c++ stl c++11 atomic

在新的C++11标准中,许多原子操作在“强/弱”对中定义:

template< class T >
bool atomic_compare_exchange_weak( std::atomic<T>* obj, 
                                   T* expected, T desired );
template< class T >
bool atomic_compare_exchange_weak( volatile std::atomic<T>* obj, 
                                   T* expected, T desired );

我理解弱者可能会更快,但可能会偶尔失败,因此需要将其置于while循环中,如下所示(取自cppreference):

void append(list* s, node* n)
{
    node* head;
    do {
        head = s->head;
        n->next = head;
    } while(! std::atomic_compare_exchange_weak(s->head, head, n));
}

但是

  1. 弱操作究竟做了什么?为什么他们有时会失败,为什么他们会更快? (我会喜欢一些核心微处理器架构细节。)

  2. 什么时候弱的形式更好,什么时候推荐强的?

0 个答案:

没有答案