gccの内蔵型原子操作:AnはCASでopration追加: http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.htmlアトミックな操作を実装する方法は?
私はアトミック操作を必要としています。 bool atomic_compare_add(int &ptr, int &expected, int val)
機能がatomiclyを実行します:if (ptr != expected) { ptr = ptr + val; return true; } else { return false; }
ちょうどこのような関数のプロトタイプ:それは少しgccの組み込み関数__atomic_compare_exchange_nが、異なるようなものです私が望む機能は、とは異なるから__atomic_compare_exchange_nと__atomic_add_fetch、__atomic_comp are_exchange_nは
if (*ptr == *expected) { *ptr = desire; return true; } else { return false; }
を意味し、__atomic_add_fetchは*ptr = *ptr + val; return *ptr;
を意味します。Linux gcc/g ++でその操作を実装する方法は?
:http://en.cppreference.com/w/cpp/atomic/atomicを – OutOfBound
あなたが投稿したリンクは '__atomic_add_fetch'を文字通り' __atomic_compare_exchange_n'の後に10行記述します。これはあなたが望むことをするようです。 – Frank
あなたのロジックをより一般的な 'if(ptr == expected){ptr = ptr + value; } else {do nothing} 'を使用し、[' atomic :: compare_exchange'](http://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange) – rustyx