.NET Framework 中信号量的定义在 System.Threading 中,名为 Semaphore 的类。

 

在操作系统的课程我们应该学到了如果使用信号量来进行多线程或者多进程的同步和互斥。(如果你没学过,不妨找一本书看看。个人认为很有好处。^_^)这时,你就可以用 Semaphore 进行一个小练习了。

 

我们可以随便使用 Semaphore 来做个 Demo。反正是给你自己看的,不用太好啦。

 

private Semaphore sem = new Semaphore(0, 1);

 

public void Begin()

{

    Thread.Sleep(1000);

    Console.WriteLine("Begin()");

    sem.Release();

}

 

public void End()

{

    sem.WaitOne();

}

 

public static void Main

{

    Thread t = new Thread(Begin);

    t.Start();

   

    // Do some work here.

    Console.WriteLine("Main()");

   

    End();

}

 

怎么样,简单吧。跟操作系统中所说的信号量没什么两样。当然可以把信号量中的计数器给改一下。方法是在构造函数中指定不同的数值就可以了。

 

异步调用有了它让人感觉到十分的有把握了。至少我现在是不再怕多线程的程序了。

 

Semaphore 类似的有一个 ManualResetEvent AutoResetEvent。它们相当于 new Semaphore(0, 1)。我个人感觉是这样的。但是我也没把 ManualResetEvent AutoResetEvent 之间的关系搞清楚。所以建议看此文的人去查一下 MSDN