[英]atomic arguments order of execution in C
我正在嘗試使用stdatomic.h函數,特別是atomic_flag_test_and_set。 我沒有看到任何錯誤,但想知道我在做什么總是安全的。 我有一個如下結構:
typedef struct Mystruct {
int somedata;
atomic_flag flag;
} Mystruct;
后來,當我創建一個mystruct並使用它的旗幟實例時,我這樣做:
if(atomic_flag_test_and_set(&mystructInstance->flag)) {
// do something
}
在檢查原子操作之前, &mystructInstance->flag
的評估是否總是完成? 我會假設,因為它應該是一個處理器指令(或模擬一個處理器指令的東西),但我想確定。
在檢查原子操作之前,
&mystructInstance->flag
的評估是否總是完成?
這個問題的答案可以在C標准的“函數調用”一節中找到。
6.5.2.2函數調用
...
參數可以是任何完整對象類型的表達。 在准備對函數的調用時,將評估參數,並為每個參數分配相應參數的值。
另請注意,如果函數需要多個參數,則未指定傳遞給它的參數的計算順序。 這也在標准的同一部分中提到。
10.在評估函數指示符和實際參數之后但在實際調用之前有一個序列點。 調用函數(包括其他函數調用)中的每個評估在被調用函數體的執行之前或之后沒有特別順序地進行,關於被調用函數的執行是不確定地排序的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.