我们使用
semBcreate
创建了一个二进制信号量。
代码片段:
semTake(with 10s wait); // it will be called only once during restart
semGive(); //this will be called from multiple thread.
所以这里我们会调用很多
semGive()
而没有任何 semTake()
。因为它只在设备重新启动期间调用一次以实现同步。
请帮我回答这个问题,我们没有看到任何问题,但是如果设备长时间运行并且二进制信号量中会调用很多
semGive
怎么办?
我们多次尝试致电
semGive
,但没有注意到任何潜在的问题。但我们需要了解这样做是否有任何缺点。
我们多次尝试致电 semGive,但没有注意到任何潜在问题
这几乎总是一个坏主意。如果文档不能保证信号量(或任何其他东西)始终按照您的程序需要的方式运行,那么您就会为将来的麻烦做好准备。
如果某些库开发人员认为当前的实现存在错误并修复了该错误,会发生什么?该错误修复作为操作系统更新的一部分进行,您的客户接受了更新,然后您的应用程序突然停止为每个人、任何地方、突然停止工作。
去过那里。做到了。这并不好玩。
我从来没有听说过这个
semBCreate
。但@teapot418 发现一个页面可能与您正在使用的相同semBCreate
。在我看来,好像 maybe 您可以推断出多次调用 semGive(s)
而中间没有 semTake(s,...)
与单次调用 semGive(s)
具有相同的效果。如果这是您的程序所需的行为,那么您可能没问题。另一方面,文档并没有明确地谈论这种情况,*所以也许你应该向库作者发送一封电子邮件以确保确定。
* 您所做的不是二进制信号量的正常用例。