如果我有一個整數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