线程同步
如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏。如果多个线程不会同时访问共享数据,可以不用线程同步。
线程同步也会有一些问题存在:
1、性能损耗。获取,释放锁,线程上下文建切换都是耗性能的。
2、同步会使线程排队等待执行。
线程同步的几种方法
阻塞
当线程调用Sleep,Join,EndInvoke,线程就处于阻塞状态(Sleep使调用线程阻塞,Join、EndInvoke使另外一个线程阻塞),会立即从cpu退出。(阻塞状态的线程不消耗cpu)
当线程在阻塞和非阻塞状态间切换时会消耗几毫秒时间。
//Join static void Main() {
Thread t = new Thread (Go);
Console.WriteLine (“Main方法已经运行…”);
t.Start();
t.Join();//阻塞Main方法 Console.WriteLine (“Main方法解除阻塞,继续运行…”);
} static void Go() {
Console.WriteLine (“在t线程上运行Go方法…”);
} //Sleep static void Main() {
Console.WriteLine (“Main方法已经运行…”);
Thread.CurrentThread.Sleep(3000);//阻塞当前线程 Console.WriteLine (“Main方法解除阻塞,继续运行…”);
} //Task static void Main() {