gpt4 book ai didi

c++ - atomic_compare_and_swap 和 spin trylock 哪一个更快?

转载 作者:行者123 更新时间:2023-11-30 17:22:10 25 4
gpt4 key购买 nike

下面是我的用例

我有一个全局变量,并且所有 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;
}

带有自旋trylock

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(),还有其他技术吗?

最佳答案

您需要使用阻塞测试。像自旋锁这样的非阻塞测试充其量是循环中的测试和 sleep ,会占用大量处理器周期,从而损害所有其他进程。尝试使用信号量

关于c++ - atomic_compare_and_swap 和 spin trylock 哪一个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com