哪一个atomic_compare_and_swap或旋转trylock更快
Which one is faster atomic_compare_and_swap or spin trylock?
下面是我的用例
我有一个全局变量,所有 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()更快,如果还有其他技术?
您需要使用阻塞测试。 非阻塞测试,如旋转锁,充其量是测试和循环睡眠,需要大量的处理器周期,而对所有其他进程不利。尝试使用信号量
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 如何绕任意轴旋转点?
- 哪一个atomic_compare_and_swap或旋转trylock更快