这个问题已经在这里有了答案:




已关闭10年。






琐碎的int访问器中的关键部分实际上有什么用吗?

int GetFoo()
{
   CriticalSection(crit_id);
   return foo;
}

void SetFoo(int value)
{
   CriticalSection(crit_id);
   foo = value;
}

两个线程是否可能尝试同时读取和写入foo?我本来以为“否”,除非一次将整数写入字节,在这种情况下,我可以看到它的用法。但是我想现代cpus会在单个原子 Action 中读取/写入整数...

最佳答案

只要您使用的是内存对齐的 native 字长整数,读操作都是原子操作,无需锁定即可完成,但写操作会引起竞争状态,因此必须锁定。如果变量未与内存对齐,则可能导致多核/多CPU环境中的不一致。

09-11 19:30
查看更多