关于线程同步的几种方法:
一、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关键字来控制执行顺序。