信号量是一个计数对象。问题是如何用多个计数锁定它?
例如,我想调用lock(num, timeout)
函数。当至少有num
个可用资源时,它会锁定;或者,当timeout
通过时,它将失败,但仍有资源少于num
。
在Windows上可以吗?或者也许使用pthread?
当前在Windows上,WaitForSingleObject
将对象数量减少1
。我认为多次致电WaitForSingleObject
无法解决问题,因为:
准确的超时很难实现,并且
我想在num
的所有资源都可用时处理数据(写入磁盘)(更快地写入更大的数据)。因此,例如,如果分别锁定了少于num
个资源,则我可能不得不下一次释放(紧接在我锁定之后)下一次,因为即使超时过去,其余资源仍然不可用。我认为这是一个糟糕的设计。需要帮助。
答案 0 :(得分:0)
在线搜索之后,我认为没有没有简单且官方的方法来实现带有多个锁的信号灯。 System V支持这种信号量,但是我认为在Windows上使用它很尴尬。
相反,我选择使用@MayurK提到的条件信号机制(基于pthreads
),由一个生产者(获取数据)和一个消费者(将数据存储到磁盘)使用。为了使事情变得容易,我实现了一个缓冲区句柄实用程序Flex-Buffer
并将其托管在Github上。希望它能帮助其他有类似问题的人。