内联汇编程序增量64位计数器
inline assembler increment 64bit counter
我想以原子方式递增内联程序集中的64位(C++中的长类型)计数器。我知道如何在32位值(int)上做到这一点:
asm volatile("lock; incl %0" : "=m" (val) : "m"(val));
但我不知道如何在长期价值上做到这一点。
将自我回答从问题移动到答案
这很容易,但我还不熟悉x86-64。
asm volatile("lock; incq %0" : "=m" (val) : "m"(val));
应该是:
asm volatile("lock; incq %0" : "+m" (val));
指定单独的操作数而不受强制输入到与输出相同位置的约束,可能会导致以下代码:
val = something;
asm volatile("lock; incq %0" : "=m" (val) : "m"(val));
被错误地优化。您可能还需要一个内存阻塞器,以防止对其他变量的访问被移过asm。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何在 64 位平台上计算 32 位哈希C++?
- 使用 SysNative 在 Visual Studio 中创建 64 位应用程序
- 在 64 位整数内旋转(90°)位矩阵(最多 8x8 位)
- 用32位原子实现64位原子计数器
- 内联汇编程序增量64位计数器