我想這個說法(if語句的主體中)是原子的:有沒有一種方法可以確保C中的操作的原子性?
if(I2C1STATbits.P || cmd_buffer_ptr >= CMD_BUFFER_SIZE - 1)
cmd_buff_full = 1; // should be atomic
我處理器(頁dsPIC33F)支持原子位設置和清除。它還支持16位寄存器和內存位置的原子寫入;這些都是單一循環。我如何確定操作將以原子方式實現 - 是否有辦法強制編譯器執行此操作?在我的情況下,我相當肯定它會被編譯爲原子,但是如果我改變了一些其他的代碼並重新編譯了一些東西,或者我更新了編譯器,我不希望它在將來發生變化。例如,是否有atomic
關鍵字?
我正在使用GCC v3.23 - 更具體地說,MPLAB C30,一個修改後的GCC閉源版本。我正在研究一種只有中斷的微控制器;沒有線程的概念。原子性唯一可能的問題是,如果可能的話,在兩個週期的寫入過程中可能會觸發中斷。
我不確定我的微控制器庫是否提供了這個功能。 – 2010-12-10 21:40:19
所以你應該檢查它是否。 – 2010-12-10 21:43:15
我不這麼認爲。它不支持信號或線程。 – 2010-12-11 01:09:47