日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的信号量---Semaphore

發布時間:2025/3/21 C# 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的信号量---Semaphore 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Semaphore是System.Threading下的類,限制可同時訪問某一資源或資源池的線程數。

?

常用構造方法

https://msdn.microsoft.com/zh-cn/library/e1hct27h(v=vs.110).aspx

public Semaphore(int initialCount,int maximumCount )

參數

initialCount
Type:?System.Int32

可以同時授予的信號量的初始請求數。

maximumCount
Type:?System.Int32

可以同時授予的信號量的最大請求數。

?

?示例代碼

class Program{static Semaphore sema = new Semaphore(1,1);static void Main(string[] args){for (int i = 0; i < 3; i++){var thread = new Thread(Test) { Name = $"Thread{ i }" };thread.Start();}Console.ReadKey();}static void Test(){sema.WaitOne();for (int i = 0; i < 3; i++){Console.WriteLine($"ThreadName:{ Thread.CurrentThread.Name} i:{i}");Thread.Sleep(1000);}sema.Release();Console.ReadKey();}}

代碼說明:

static Semaphore sema = new Semaphore(1,1);

聲明一個信號量,指示控制的資源初始和最大線程并發數為1

sema.WaitOne();
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"ThreadName:{ Thread.CurrentThread.Name} i:{i}");
Thread.Sleep(1000);
}
sema.Release();

使用以上兩個方法控制資源,某個線程執行sema.WaitOne()方法時,若有其他線程已經占用資源,此方法將阻塞,直到,其他線程釋放,即調用sema.Release();方法

執行效果如下:

同一段時間內,只有一個線程進入共享資源中。

?

以下是最大并發數為2的執行效果:

static Semaphore sema = new Semaphore(2,2);

同一段時間內,有兩個線程進入了貢獻資源中

?

轉載于:https://www.cnblogs.com/doublejun/p/7520347.html

總結

以上是生活随笔為你收集整理的C#中的信号量---Semaphore的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。