以下は私のユースケースです
1 つのグローバル変数があり、すべての CPU で複数のスレッドがこれにアクセスしています。
アトミック比較交換あり
auto old = global_var;
auto new_var = old
for (;;) {
new++;
bool got_it = atomic_compare_and_swap(global_var,
old,
new_var);
if (got_it) {
return new_var;
}
old = global_var;
new_var = old;
}
スピントライロック付
for(;;)
{
auto temp = go_for_work();
if (temp -> spin.trylock() == 0 )
{
continue;
}
}
... go_for_work
{
auto old = global_var;
auto new_var = old
new_var++;
global_var = new_var;
return new_var
}
これは大まかなコードですが、明確であることを願っています。不明な場合はお知らせください。
global_var は int ではなく、構造体です。
だから、私の主な目的はglobal_varを保護することです.atomic_compare_and_swapとspin.trylock()のどちらが速いですか?