下面是我的用例
我有一个全局变量,所有 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()更快,如果还有其他技术?
您需要使用阻塞测试。 非阻塞测试,如旋转锁,充其量是测试和循环睡眠,需要大量的处理器周期,而对所有其他进程不利。尝试使用信号量