gpt4 book ai didi

c++ - 如果我们不等待就发出信号量会发生什么?

转载 作者:行者123 更新时间:2023-11-28 03:03:56 31 4
gpt4 key购买 nike

在我实现的项目中,我遇到了这个场景。我有一个由一个线程占用的二进制信号量。当该线程执行时,信号量被另一个线程多次发出信号。这是一个问题还是会导致任何未定义的行为??

最佳答案

在没有相应等待的情况下发出信号量是错误的。如果你这样做会发生什么取决于实现。

如果调用 ReleaseSemaphore在 Windows 信号量对象上将导致超过最大计数,ReleaseSemaphore 返回 FALSE。它不会抛出异常或导致致命的运行时错误。

在 Linux 下,调用 sem_post超过最大计数返回 -1,并且 errno 设置为 EOVERFLOW。同样,这对您的应用程序来说不会是致命的。

在 .NET 下,调用 Release这将超过信号量的最大值导致 SemaphoreFullException 被抛出。

释放信号量的频率比获取信号量的频率高是逻辑错误。如果您的程序这样做,那么您就有一个潜在的错误。在您的特定情况下这可能没问题,但如果您尝试使用二元信号量以外的任何东西进行此操作,您可能最终会遇到一些很难发现的错误。

我强烈建议您在释放信号量时检查返回值,并将失败视为致命异常。

关于c++ - 如果我们不等待就发出信号量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141342/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com