C++ 信号量的Peek操作

C++ 信号量的Peek操作,c++,c,operating-system,semaphore,C++,C,Operating System,Semaphore,假设我们为信号量定义了Up()、Down()和Peek()操作,并且Peek()操作返回信号量的值 Peek()操作的优缺点是什么 如何有效地使用Peek()操作?APeek功能对同步无效。它只允许查看当前状态,但不应采取任何操作,因为在窥视之后,信号量已经可以更改了。它可以用于监控以解决死锁,但这是非常棘手的。如注释中所述,它可以帮助调试 try函数更有用。如果可能,这只会关闭信号量,如果不可能,则返回失败条件。这种方式可以在信号量空闲时执行操作,如果信号量不空闲则不阻塞(基于轮询)。大多数情

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

Peek()
操作的优缺点是什么


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

A
Peek
功能对同步无效。它只允许查看当前状态,但不应采取任何操作,因为在窥视之后,信号量已经可以更改了。它可以用于监控以解决死锁,但这是非常棘手的。如注释中所述,它可以帮助调试

try
函数更有用。如果可能,这只会
关闭信号量,如果不可能,则返回失败条件。这种方式可以在信号量空闲时执行操作,如果信号量不空闲则不阻塞(基于轮询)。大多数情况下,使用不同的线程,只需将
向上
向下
即可获得更好的结果(至少是更干净的代码)

[假设问题是关于操作系统的本机信号量的。]

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


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

这主要是为了调试和测试。你不能用它做很多有用的同步。