我已在下面的代碼段:訪問來自兩個線程變量用C
int attempts = 0;
while(ptr== NULL && attempts < 60) {
sleep(1000);
attempts++;
}
連續環路等待指針由另一個線程來設置。另一個線程只會做
ptr = //some value
我的問題是,這是安全的嗎?這會導致任何內存損壞,導致以後很難調試錯誤條件?
P.S:我知道由於缺少volatile關鍵字,編譯器可能會優化ptr。這對我來說並不重要。我只關心這是否會給代碼的其他不相關部分帶來問題。
考慮使用此參考文獻中描述的原子操作http://en.cppreference.com/w/c/atomic它是在C11規範中引入的。 'atomic_compare_exchange_strong'是你在循環中需要的。 – bkausbk 2014-09-02 09:04:16
看起來很安全,賦值操作是原子的。但是,這種方法並不理智,如果在你睡覺的時候,ptr會被改變成某個值,然後又變回NULL。 – 2014-09-02 09:09:41
另一個線程只會執行 - 只有一個寫入線程?如果是的話,它似乎是安全的,因爲它是簡單的彙編指令(x86上的mov)。如果不是,那麼這是不安全的。 – someuser 2014-09-02 09:19:01