我正在尝试为 win xp 构建 nodejs 8.5 .. 我发现 v8_base_2 项目文件 runtime_atomics.cc 定义了一些使用 Interlocked[,And,Or,Add,..][8,16,32 ,..]
需要 Windows 8+ 的功能
文档。对于其中许多函数来说,这些函数的执行将阻止多个线程访问同一个变量。
我想知道的是:“这些函数的执行是否真的阻止了多个线程访问相同的变量或相同的位置的变量?”
如果它阻止相同的 var。不是位置,那么这些操作是否有独立于平台或至少与 XP 兼容的实现
尤其是8bit操作数
最佳答案
“相同的变量或相同的位置”暗示了 C++ 不做的区别。对象是内存中具有特定类型的位置。并且给定 InterlockedIncrement
,该类型已被限制为整数类型。
最终,这些函数执行总线锁定的读-修改-写。这确实可以防止其他线程的干扰。
关于c++ Interlocked Ops 在 WinXP 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46313028/