c++ - 围绕整数 getter 和 setter 的关键部分是否多余?

标签 c++ multithreading

Possible Duplicate:
Do I need to use locking with integers in c++ threads

普通 int 访问器中的关键部分实际上有什么用处吗?

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

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

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

最佳答案

只要您使用内存对齐的 native 字长整数,读取就是原子的,并且可以在不锁定的情况下完成,但写入可能会引起竞争条件,因此必须锁定。如果变量没有内存对齐,可能会导致多核/多CPU环境中的不一致。

关于c++ - 围绕整数 getter 和 setter 的关键部分是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3062845/

相关文章:

c++ - C/C++ 中的四元数库

c++ - Windows CopyFile 的正确输入格式是什么?

java - android跨进程同步方法

c# - 锁定对象

java - 如何让这两个线程一起运行?

.net - .NET 多线程算法的令人惊讶的结果

c++ - GCC 内联汇编错误 : block assembly operand not recognized

c++ - ifstream::binary 和 ios::binary 之间有区别吗?

c++ - 为什么这个函数重载不起作用?

c# - 异步/等待示例