0

下面是我的用例

我有一个全局变量,所有 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(),还有其他一些技术?

4

1 回答 1

0

You need to use a blocking test. non-blocking tests like a spin lock which at best is test and sleep in a loop take a lot of processor cycles at the detriment to all other processes. Try using a semaphore

于 2015-01-22T00:36:50.463 回答