C# 中信号量的使用

 

.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

转载于:https://www.cnblogs.com/ydong/archive/2007/04/30/733608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值