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

c# semaphore

作者:金钱打造势力狗。   发布日期:2026-02-23   浏览:98

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} 已释放信号量。");
    }
}

解释说明:

  1. SemaphoreSlim: 这是一个轻量级的信号量实现,用于控制对资源的并发访问。SemaphoreSlim(3) 表示最多允许3个线程同时访问受保护的资源。
  2. WaitAsync(): 异步请求进入信号量。如果当前已经有3个线程在访问,则其他线程会在此处等待,直到有线程释放信号量。
  3. Release(): 释放信号量,允许另一个等待的线程进入。
  4. 异步编程: 使用 asyncawait 关键字来实现异步等待信号量,避免阻塞主线程。

这个例子展示了如何使用 SemaphoreSlim 来限制同时访问某个资源的线程数量。

上一篇:c# 字符串转字节数组

下一篇:c# get set用法

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

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

Laravel 中文站