哪一个atomic_compare_and_swap或旋转trylock更快

Which one is faster atomic_compare_and_swap or spin trylock?

本文关键字:旋转 trylock 更快 and atomic compare 哪一个 swap      更新时间:2023-10-16

下面是我的用例

我有一个全局变量,所有 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不是整数,而是结构。

所以,我的主要目的是保护global_var,哪一个atomic_compare_and_swap或spin.trylock()更快,如果还有其他技术?

您需要使用阻塞测试。 非阻塞测试,如旋转锁,充其量是测试和循环睡眠,需要大量的处理器周期,而对所有其他进程不利。尝试使用信号量