当你需要2个线程读写同一个数据时,就需要数据同步。线程同步的办法有:(1)原子操作;(2)锁。原子操作能够保证该操作在CPU内核中不会被“拆分”,锁能够保证只有一个线程访问该数据,其他线程在尝试获得有锁的数据时,会被拒绝,直到当前获得数据的线程将锁释放,其他线程才能够获得数据。
为什么要线程同步?
我们先看一个需要数据同步的例子,
static void Main(string[] args){
bool flag = false;
var t1 = new Thread(() => { if (flag) Console.WriteLine("Flag"); });
var t2 = new Thread(() => { flag = true; });
t1.Start();
t2.Start();
Console.ReadLine();
}