用这样的块替换互斥锁有什么意义
void stack_push(stack* s, node* n)
{
node* head;
do
{
head = s->head;
n->next = head;
}
while ( ! atomic_compare_exchange(s->head, head, n));
}
无法理解用这种原子交换替换互斥锁可以获得什么好处?
用这样的块替换互斥锁有什么意义
void stack_push(stack* s, node* n)
{
node* head;
do
{
head = s->head;
n->next = head;
}
while ( ! atomic_compare_exchange(s->head, head, n));
}
无法理解用这种原子交换替换互斥锁可以获得什么好处?
有很多优点;
它通常比互斥锁快。话虽如此,您不能简单地用 CAS 替换所有互斥锁。单个 CAS 将在多个线程之间安全地交换一个引用。
如果您有一个复合函数,其中一个写入依赖于另一个读取(例如),您将需要一个互斥锁来确保原子性。