Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# semaphoreslim

作者:你忘我亡   发布日期:2025-08-19   浏览:55

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    // SemaphoreSlim 用于控制对资源的并发访问
    private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(3); // 允许最多3个线程同时访问

    static async Task Main(string[] args)
    {
        var tasks = new Task[10];

        for (int i = 0; i < tasks.Length; i++)
        {
            int taskNum = i;
            tasks[i] = Task.Run(async () =>
            {
                Console.WriteLine($"Task {taskNum} is waiting to enter the semaphore.");

                // 请求进入信号量
                await semaphore.WaitAsync();

                try
                {
                    Console.WriteLine($"Task {taskNum} has entered the semaphore.");
                    await Task.Delay(2000); // 模拟耗时操作
                }
                finally
                {
                    // 释放信号量
                    semaphore.Release();
                    Console.WriteLine($"Task {taskNum} has released the semaphore.");
                }
            });
        }

        await Task.WhenAll(tasks);
    }
}

解释说明:

  • SemaphoreSlim 是一个轻量级的同步原语,用于限制可以同时访问资源或资源池的线程数。
  • 在这个示例中,我们创建了一个允许最多3个线程同时访问的 SemaphoreSlim 实例。
  • 使用 WaitAsync() 方法请求进入信号量,这会阻塞当前线程直到有可用的信号量槽位。
  • 当线程完成其工作后,使用 Release() 方法释放信号量,以便其他等待的线程可以进入。
  • 示例代码展示了如何通过多个任务来模拟并发访问,并确保同一时间只有最多3个任务能够执行关键部分的代码。

上一篇:c# folderbrowserdialog

下一篇:c#timer

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站