關於線程同步的幾種方法:
一、volatile關鍵字
volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它只能在變量一級做同步,volatile的含義就是告訴處理器, 不要將我放入工作內存, 請直接在主存操作我。(【轉自www.bitsCN.com 】)因此,當多線程同時訪問該變量時,都將直接操作主存,從本質上做到了變量共享。
public class A
{
private volatile int _i;
public int I
{
get { return _i; }
set { _i = value; }
}
}
二、lock關鍵字
lock是一種比較好用的簡單的線程同步方式,它是通過為給定對象獲取互斥鎖來實現同步的。它可以保證當一個線程在關鍵代碼段的時候,另一個線程不會進來,它只能等待,等到那個線程對象被釋放,也就是說線程出了臨界區。用法:
public void Function()
{
object lockThis = new object ();
lock (lockThis)
{
// Access thread-sensitive resources.
}
}
三、使用線程安全類(Concurrent)
這些類可以單線程寫入,多線程讀取。有ConcurrentBag,ConcurrentSet,ConcurrentDictionary等等。
四、使用await async關鍵字來控制執行順序。