Linux的ACCESS_ONCE宏定義如下:爲什麼ACCESS_ONCE如此複雜?
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
我明白這是什麼做的,但不知道爲什麼它是如此複雜?我的理解是它具有下列功能:
- 取地址(創建一個臨時指針)關注的是指針 變量
- 演員這一相同類型的揮發性指針
- 去參考
這是爲什麼不以更簡單的方式實現任何想法,說:
#define ACCESS_ONCE(x) ((volatile typeof(x))(x))
謝謝大衛,您的清晰準確的解釋。 – user3480510
更多的上下文:C標準允許將'volatile'限定符分配給* data *,而不是*訪問*數據。有很多人認爲這很愚蠢,其中,萊納斯。此外,'volatile'還有一些問題,在Linux內核,多線程等方面它有點被認爲是有害的。因此,ACCESS_ONCE宏(&friends)中的技術是一種強制使用C只有在需要時纔會產生不穩定的語義,避免了缺點。請注意,這足以引起GCC迴歸! – hmijail