首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号量的Peek操作

信号量的Peek操作
EN

Stack Overflow用户
提问于 2013-11-20 07:58:29
回答 2查看 460关注 0票数 1

假设我们为信号量定义了Up()Down()Peek()操作,而Peek()操作返回信号量的值。

Peek()操作的利弊是什么?

如何有效地使用Peek()操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-20 08:45:07

peek函数对于同步是无用的。它只允许查看当前状态,但不应该采取任何操作,因为在查看之后,信号量已经可以更改。它可以用于监视以解决死锁,但这是非常棘手的。正如注释中提到的,它可以帮助调试。

try函数更有用。这只会在可能的情况下down信号量,如果不可能返回一个失败的条件。这样,如果信号量是空闲的,就可以执行操作,如果不是,则不要阻塞(基于轮询)。大多数情况下,使用不同的线程只使用updown可以获得更好的结果(至少更干净的代码)。

票数 2
EN

Stack Overflow用户

发布于 2013-11-20 09:06:27

据推测,这个问题是关于操作系统的本地信号量。

在WinAPI和Linux中,信号量是内核对象,因此可以从另一个进程甚至从另一个应用程序访问信号量。纯信号量不仅仅是带有附加计数器的互斥.您不能只updown (信号量),也没有Capture()函数来手动减少计数器。但是没有这样做,而是使用了Wait()Release()函数。当等待函数返回时,它会将信号量的计数减少1。当线程或进程使用完资源后,它调用Release()将信号量的计数增加一个。

那么Peek()呢--是的,它对于同步的目的是无用的。但是,您可以在调试时检查信号量的可用性。请尽量避免使用Peek()进行同步,尝试只处理Wait()Release()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20090340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档