2017-06-23 71 views
0

在獲取結果並將Post_Bits清除至其原始狀態Post_Bits &= (~Post);之前禁用中斷並在先前看到特定Post res = Post_Bits & Post;之後測試條件的要點如何? 例如,如果在另一個函數上使用了Post_Bits,並且您在此處進行更改,請在禁用/啓用中斷內部清除它是否使線程安全?啓用禁用中斷和線程安全

BOOL Post_a_Note(Post_t Post) // Post_t is a 32bit number 
{ 
    Post_t res; //Final Result 
    UINT16 capture = INTDisableInterrupts(); 
    res = Post_Bits & Post; 
    Post_Bits &= (~Post); 
    INTRestoreInterrupts(capture); 
    return (res != 0); 
} 
+1

因爲如果在第5行和第6行之間發生中斷,並且設置了正在檢查的位,您將清除該位但報告爲未設置:因此缺少該事件。 –

+1

中斷不是線程,線程安全是不同的野獸。 –

回答

1

禁用中斷是確保代碼片段隨時只由一個線程執行的最簡單的方法。