谁知道semaphore lock相关信息?

来源:百度知道 编辑:UC知道 时间:2024/06/21 11:58:16
怎样获得释放?

Semaphore 类表示一个命名信号量(系统范围)或本地信号量。Windows 信号量是计数信号量,可用于控制对资源池的访问。

管理受限资源
线程通过调用 WaitOne 方法来进入信号量,此方法是从 WaitHandle 类派生的。当调用返回时,信号量的计数将减少。当一个线程请求项而计数为零时,该线程会被阻止。当线程通过调用 Release 方法释放信号量时,将允许被阻止的线程进入。针对让被阻止的线程进入信号量,不存在保证的顺序(例如 FIFO 或 LIFO)。

线程可以通过重复调用 WaitOne 方法来多次进入信号量。若要释放信号量,线程可以调用 Release()()() 方法重载相同的次数,也可以调用 Release(Int32) 方法重载并指定要释放的项数。

信号量和线程标识
Semaphore 类不对向 WaitOne 和 Release 方法发出的调用强制线程标识。例如,信号量的一个常用方案包括一个生产者线程和一个使用者线程,其中一个线程总是增加信号量计数,而另一个线程总是减少信号量计数。

编程人员应负责确保线程释放信号量的次数不会过多。例如,假定信号量的最大计数为二,线程 A 和线程 B 都进入信号量。如果线程 B 中发生了一个编程错误,导致它调用 Release 两次,则两次调用都会成功。这样,信号量的计数就已经达到了最大值,所以,当线程 A 最终调用 Release 时,将引发 SemaphoreFullException。