6

在新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. 什么时候推荐弱形式,什么时候推荐强形式?

4

0 回答 0