什么是非阻塞信号量?

时间:2012-08-04 00:31:25

标签: linux multithreading concurrency mutex semaphore

似乎是矛盾,因为信号量应该阻止功能。

互联网搜索没有显示出对定义这意味着什么有用的东西。

3 个答案:

答案 0 :(得分:7)

如果信号量的值为0,则对其进行向下操作将阻塞,直到有人释放资源并增加信号量。

如果资源不可用,非阻塞信号量不会阻止向下操作,而是产生错误。如果程序立即需要该资源或不暂停执行,这可能很有用,如果资源不可用,程序逻辑可以做其他事情。

答案 1 :(得分:5)

非阻塞信号量通常是指信号量,它允许您尝试获取而不阻塞。如果信号量不能被“锁定”,那么它将失败但不会阻塞。如果它可以被锁定,它将锁定它并返回true(它被锁定)。

答案 2 :(得分:1)

例如,关联的等待操作WaitForSingleObject()允许指定超时值 dwMilliseconds 。如果此参数设置为0,则呼叫结果将始终立即返回。这样,可以在不阻塞的情况下测试信号量的状态。