如果我有一个整数x,下列哪些语句在iPhone上的ARM架构上是原子的?哪些整数操作在ios/arm平台上是原子的?
int x;
int y;
x = 92; // . . . . . . A
x++; // . . . . . . B
y = ++x; // . . . . . . C
printf("x = %d\n", x); // D
我知道,在i386平台上,语句A,B和D是原子的,而C不是。我很确定C在iOS中不是原子的。我怀疑基本的加载和存储操作(D和A)在iOS中也是原子的,但我不确定。有谁知道更多?
它是如何与16位和8位值?或者iPhone 5S上的64位值和iPhone 5及更低版本上的64位值?
(如果答案是,因为我怀疑...有任何平台,基本负载和存储操作不是原子?)
我不太确定B是在i386原子:)你试图做什么?你可以使用操作系统同步原语吗?例如OSAtomic ...函数系列https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW14 – yurish
他们不是原子的,他们创造了一个完整的记忆障碍。但是否则他们是,我想。例如如果x是23,一个线程通过调用x ++来更改它,而另一个线程同时访问x,那么其他线程在加载x时将得到23或24,但不是-817376或21. – Michael
我可能是错的,但认为原子性是语言的东西而不是平台。当你说上述操作是原子的时候,你依赖于编译器的实现细节。 – yurish