多核心與同步
以兩個執行緒同時執行上方的程式碼時,counter的最終值有時會小於200000。其原因下列何者正確?
int counter = 0;
// 兩個執行緒同時各自執行
for (int i = 0; i < 100000; i++)
counter++;
- A因為CPU有時會算錯加法
- B因為counter++分為讀取、加法、寫入,當兩個執行緒的處理重疊時,其中一方的加法會遺失
- C因為迴圈的次數會依執行緒自動減半
多核心與同步
int counter = 0;
// 兩個執行緒同時各自執行
for (int i = 0; i < 100000; i++)
counter++;