private static Semaphore white = new Semaphore(1, 1);//信号量,第一位数是1,所以先执行white.WaitOne()。
private static Semaphore black = new Semaphore(0, 1);//信号量
/*
* new Semaphore(0, 1); 构造函数第一个参数,表示我们还可使用的授权数。 第二个参数表示我们最大可申请的授权数
* semaphore.Release(); 等同于 semaphore.Release(1);
*/
private static int count = 0;
static void Main(string[] args)
{
Thread bla = new Thread(Black);
Thread whi = new Thread(White);
bla.Start();
whi.Start();
}
private static void Black()
{
for (; ; )
{
black.WaitOne();
Console.WriteLine("捡黑子");
Thread.Sleep(1000);
white.Release();//释放信号量,将初始值设回1
}
}
private static void White()
{
for (; ; )
{
white.WaitOne();
Console.WriteLine("捡白子");
Thread.Sleep(1000);
count++;
if (count % 2 == 0)
black.Release();//释放信号量,将初始值设回1
else
white.Release();//释放信号量,将初始值设回1
}
}
C# 多线程与信号量
最新推荐文章于 2023-06-06 20:49:01 发布