这个问题已经在这里有了答案:
已关闭10年。
琐碎的int访问器中的关键部分实际上有什么用吗?
int GetFoo()
{
CriticalSection(crit_id);
return foo;
}
void SetFoo(int value)
{
CriticalSection(crit_id);
foo = value;
}
两个线程是否可能尝试同时读取和写入foo?我本来以为“否”,除非一次将整数写入字节,在这种情况下,我可以看到它的用法。但是我想现代cpus会在单个原子 Action 中读取/写入整数...
最佳答案
只要您使用的是内存对齐的 native 字长整数,读操作都是原子操作,无需锁定即可完成,但写操作会引起竞争状态,因此必须锁定。如果变量未与内存对齐,则可能导致多核/多CPU环境中的不一致。