C#实战小技巧(三):Semaphore信号量

本文详细介绍了Semaphore的概念及使用方法,包括初始化过程、WaitOne()与Release()方法的作用及其应用场景,旨在帮助读者掌握多线程环境下资源的有效管理和同步控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简介

Semaphore是操作系统中用于控制线程同步互斥的信号量。在编写多线程的程序时,可以使用Semaphore信号量来协调多线程并行,使各个线程能够合理地共享资源,保证程序正确运行。

2.初始化

Semaphore.Semaphore(intinitialCount, int maximumCount);

Semaphore的初始化函数如上所示,initialCount和maximumCount是32位有符号整数。初始化Semaphore可当做开启了一个线程池,initialCount代表剩余空位,maximumCount代表最大容量。示例如下,当前空位为0,最大容量为1:

Semaphore sem = new Semaphore(0, 1);

3.WaitOne()和Release()

Semaphore常用的方法有两个WaitOne()和Release()。

使用WaitOne()方法相当于等待出现退出的线程,而使用Release()方法为让一个线程退出。

假设initialCount和maximumCount都为5,开始的时候线程池有5个空位置,且总共只有5个位置,当需要并行的线程数量超过5个时,首先使用WaitOne()方法等待,发现有空位就依次进去,每进去一个空位减1,直到进去5个线程之后,空位(initialCount)为0,这时候后面的线程就一直等待,直到有线程调用了Release()方法,主动退出线程池,空位加1,在等待的线程才能继续进入线程池。

WaitOne()方法可以填入参数,用于规定最大等待时间,等待超时后,空位自动加1,继续执行下一个线程。示例如下,等待时间为1000毫秒:

sem.WaitOne(1000, true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mars Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值