C#中的信号量
信号量类使您可以限制可以访问关键节的线程数。该类用于控制对资源池的访问。System.Threading.Semaphore是Semaphore的命名空间,因为它具有实现Semaphore所需的所有方法和属性。
为了在C#中使用信号量,您只需要实例化一个信号量对象的实例。它至少有两个参数-
参考
-
MSDN
初始化Semaphore类的新实例,指定条目的初始数量和并发条目的最大数量。
初始化Semaphore类的新实例,指定条目的初始数量和并发条目的最大数量,并可选地指定系统信号对象的名称。
初始化Semaphore类的新实例,指定条目的初始数量和并发条目的最大数量,还可以选择指定系统信号对象的名称,并指定接收以下内容的变量:指示是否创建新系统信号的值。
现在让我们看一个例子:
在这里,我们使用了以下Semaphore构造函数,该构造函数初始化Semaphore类的新实例,指定并发条目的最大数量,并可以选择保留一些条目。
static Semaphore semaphore = new Semaphore(2, 2);
示例
using System;
using System.Threading;
namespace Program
{
class Demo
{
static Thread[] t = new Thread[5];
static Semaphore semaphore = new Semaphore(2, 2);
static void DoSomething() {
Console.WriteLine("{0} = waiting", Thread.CurrentThread.Name);
semaphore.WaitOne();
Console.WriteLine("{0} begins!", Thread.CurrentThread.Name);
Thread.Sleep(1000);
Console.WriteLine("{0} releasing...", Thread.CurrentThread.Name);
semaphore.Release();
}
static void Main(string[] args)
{
for (int j = 0; j < 5; j++)
{
t[j] = new Thread(DoSomething);
t[j].Name = "thread number " + j;
t[j].Start();
}
Console.Read();
}
}
}输出结果
以下是输出
thread number 2 = waiting thread number 0 = waiting thread number 3 = waiting thread number 1 = waiting thread number 4 = waiting thread number 2 begins! thread number 1 begins! thread number 2 releasing... thread number 1 releasing... thread number 4 begins! thread number 3 begins! thread number 4 releasing... thread number 0 begins! thread number 3 releasing... thread number 0 releasing...
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短