線程不安全會發生什麼問題?
線程不安全會發生什麼問題?
線程不安全會發生什麼問題?
舉例:
兩個線程共享一個堆上的公共變量a
線程1和線程2都有如下代碼
int c = a;
c = c + 1;
a = c; //實際上可能寫的是a++,但是a++看上去是原子的,為了演示,寫成如上的形式。
假設a=100,按照預期,兩個線程各執行一次,結果應該是102,但是可能出現101:
線程1:c = a; c = c +1;,此時c = 101,線程2執行c = a,此時a還是100,c = c + 1,c= 101。然後線程1寫回101,線程2也寫回101。