多线程的使用非常普遍,有了多线程就必然提到锁的概念。锁区域的代码块只允许一个线程进入。还有一种信号量SemaphoreSlim 的用法,能够支持指定多个线程进入。这里特意记录一下。
static readonly SemaphoreSlim slim = new SemaphoreSlim(2);
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(Test, i);
}
Console.ReadLine();
}
private async static void Test(object i)
{
Console.WriteLine("准备执行" + i);
await slim.WaitAsync();
Console.WriteLine("开始执行" + i);
//todo other
await Task.Delay(1000);
Console.WriteLine("执行结束" + i);
slim.Release();
}
运行结果可以看到“开始执行”只会有两个并存。
image.png
网友评论