没有锁的原子功能可以改变两个独立的存储位置

时间:2017-05-01 09:02:29

标签: c++ atomic lock-free compare-and-swap

我有以下函数updateEntry,它将值写入查找表。我想创建一个这个函数的多线程版本。 我正在调查原子操作__sync_bool_compare_and_swap,但我不确定如何正确应用它。

理论上可以在没有锁定的情况下原子地实现这个函数,因为它改变了两个独立的内存位置entryLookup[id]entry吗?

   void updateEntry(Entry ** entryLookup, unsigned int id, int val1, short val2){
            Entry * entry     = entryLookup[id];
            entry->val1       = val1;
            entry->val2       = val2;
            entryLookup[id]  += sizeof(Entry);
   }

1 个答案:

答案 0 :(得分:1)

为了使此线程安全,您可以先增加Type以确保以后出现的任何其他线程不能更改相同的条目,然后填写值。返回旧值时需要添加原子:

entryLookup[id]