相关疑难解决方法(0)

是否将指针视为C中的原子动作?

如果我有一个多线程程序通过引用读取缓存类型的内存.我可以通过主线程更改此指针,而不会冒任何其他线程读取意外值的风险.

在我看来,如果更改是原子的,其他线程将读取旧值或更新值; 从不随机内存(或空指针),对吧?

我知道无论如何我应该使用同步方法,但我仍然很好奇.

指针变化是原子的吗?

更新:我的平台是64位Linux(2.6.29),虽然我也想要一个跨平台的答案:)

c multithreading synchronization

31
推荐指数
3
解决办法
1万
查看次数

无锁结构的C++原子操作

我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b

我目前正在汇编中编写它,然后将其链接进去.但是,我想知道是否有办法让编译器自动为我执行此操作?例如,带有'原子级'的环绕代码块,并让它弄清楚如何将代码实现为底层处理器体系结构中的原子指令(或者如果底层arch不支持它,则在编译时生成错误)?

PS我知道gcc有一些内置函数(至少对于CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

c++ atomic lock-free

12
推荐指数
2
解决办法
2万
查看次数

正在更新双重操作原子

在Java中,更新double和long变量可能不是原子变量,因为double/long被视为两个独立的32位变量.

http://java.sun.com/docs/books/jls/second_edition/html/memory.doc.html#28733

在C++中,如果我使用的是32位Intel Processor + Microsoft Visual C++编译器,那么更新双(8字节)操作原子?

我找不到关于这种行为的规范.

当我说"原子变量"时,这就是我的意思:

线程A试图将1写入变量x.线程B试图将2写入变量x.

我们将从变量x得到值1或2,但不是未定义的值.

c++ visual-c++

10
推荐指数
1
解决办法
6147
查看次数