以乙個程式來說明執行緒不同步所帶來的問題
class
program
private
int counter =0;
private
void
actionmethod()
\t", thread.currentthread.name, counter);}
}}
結果如下
從上面的結果中可以看到主線程和子執行緒都在爭奪actionmethod方法,在實際專案中會引起很多問題,我們期望的效果應該是子執行緒呼叫完後主執行緒再呼叫。
下面提供兩種常用的解決方法
1.為方法新增lock關鍵字
lock關鍵字可以確保一次只有乙個執行緒呼叫它。
lock關鍵字可以簡單理解成**塊的「鎖」。
private
void
actionmethod()
\t", thread.currentthread.name, counter);}
}}
2.新增[methodimpl(methodimploptions.synchronized)]方法屬性
[
methodimpl
(methodimploptions.synchronized)
]private
void
actionmethod()
\t", thread.currentthread.name, counter);}
}
我們看下修改後的效果
達到預期!
C 執行緒同步
volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它只能在變數一級做同步,volatile的含義就是告訴處理器,不要將我放入工作記憶體,請直接在主存操作我。www.bitscn.com 因此,當多執行緒同時訪問該變數時,都將直接操作主存,從本質上做到了變數共享。能夠被標識為volati...
C 執行緒同步
使用mutex類來同步兩個單獨的程式。mutex是一種原始的同步方式,其只對乙個執行緒授予對共享資源的獨佔訪問。const string nutexname c using var m new mutex false nutexname else 互斥量是全域性的作業系統物件,請務必正確關閉互斥量。...
C 執行緒同步
同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。如程序 執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行 b依言執行,再將結果給a a再繼續操作。這裡的同步千萬不要理解成那個同時進行,應是指協同 協助 互相配合。執行緒同步是...