using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(3); // 创建一个信号量,最多允许3个线程同时访问
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
int threadId = i;
Thread t = new Thread(() => Work(threadId));
t.Start();
}
Console.ReadLine();
}
static async void Work(int id)
{
Console.WriteLine($"线程 {id} 正在等待进入信号量。");
await semaphore.WaitAsync(); // 请求进入信号量
Console.WriteLine($"线程 {id} 已进入信号量。");
// 模拟一些工作
Thread.Sleep(2000);
Console.WriteLine($"线程 {id} 即将释放信号量。");
semaphore.Release(); // 释放信号量
Console.WriteLine($"线程 {id} 已释放信号量。");
}
}
SemaphoreSlim(3) 表示最多允许3个线程同时访问受保护的资源。async 和 await 关键字来实现异步等待信号量,避免阻塞主线程。这个例子展示了如何使用 SemaphoreSlim 来限制同时访问某个资源的线程数量。
上一篇:c# 字符串转字节数组
下一篇:c# get set用法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站