什么是信号灯?

信号量是一种编程概念,经常用于解决多线程问题。我向社会提出的问题是:

什么是信号量?你如何使用它

把信号灯想象成夜总会的保镖。俱乐部允许同时有专门的人数。如果俱乐部客满,任何人都不允许进入,但一旦一个人离开,另一个人就可以进入

这只是一种限制特定资源的消费者数量的方法。例如,限制应用程序中同时调用数据库的次数

这是C#:-)中一个非常有教育意义的例子

使用系统;
使用System.Collections.Generic;
使用系统文本;
使用系统线程;
夜总会
{
公共课程
{
公共静态信号量弹跳器{get;set;}
公共静态void Main(字符串[]args)
{
//创建带有3个插槽的信号灯,其中3个可用。
保镖=新信号量(3,3);
//开夜总会。
开放夜总会();
}
公共夜总会()
{
对于(int i=1;i<=50;i++)
{
//让每一位来宾在自己的线程上进入。
线程线程=新线程(新的参数化线程启动(来宾));
线程启动(i);
}
}
公共静态void来宾(对象参数)
{
//等待进入夜总会(信号灯将被释放)。
WriteLine(“来宾{0}正在等待进入夜总会。”,args);
保镖;
//跳舞。
WriteLine(“来宾{0}正在跳舞。”,args);
睡眠(500);
//让一位客人出去(释放一个信号灯)。
WriteLine(“客人{0}正在离开夜总会。”,args);
弹跳器释放装置(1);
}
}
}

发表评论