“线程同步”的含义
当一个进程启动了多个线程时,如果需要控制这些线程的推进顺序(比如A线程必须等待B和C线程执行完毕之后才能继续执行),则称这些线程需要进行“线程同步(thread synchronization)”。
线程同步的道理虽然简单,但却是给多线程开发带来复杂性的根源之一。当线程同步不好时,有可能会出现一种特殊的情形——死锁(Dead Lock)。
“死锁”的含义
死锁表示系统进入了一个僵化状态,所有线程都没有执行完毕,但却谁也没法继续执行。究其根源,是因为“进程推进顺序不当”和“资源共享”。如例:
1)进程推进顺序不当造成死锁
-
using System;
-
using System.Collections.Generic;
-
using System.Text;
-
using System.Threading;
-
-
namespace JoinLeadToDeadlock
-
{
-
class Program
-
{
-
static Thread mainThread;
-
static void Main(string[] args)
-
{
-
Console.WriteLine("主线程开始运行");
-
mainThread = Thread.CurrentThread;
-
-
Thread ta = new Thread(new ThreadStart(ThreadAMethod));
-
ta.Start();
-
Console.WriteLine("主线程等待线程A结束……");
-
ta.Join();
-
Console.WriteLine("主线程退出");