我需要设计一个“等待事件对象”的东西,它可以接受不透明的事件对象,并且能够阻塞直到发出其中一个信号。它应该可以在MacOS / Linux / Windows上运行。因此,对于Linux / Windows,一切都非常好:
CreateEvent
中的本机事件包装到我的伪类和进行等待调用WaitForMultipleObjects
的类中。eventfd()
与poll()/epoll()
混合使用,并达到相同的目的。kqueue
和kevent
与EVFILT_USER
一起使用,但问题是我无法触发事件,而又不知道队列/已将事件添加到队列中,在Windows / Linux上不是问题,我可以设置事件或写入描述符。我的问题是,我有没有机会错过任何东西,并且实际上可以使用kevent
并以某种方式触发它,以便以后添加到队列中时,它会发出信号?我不是在谈论编写用户空间代码,这可以说是知道没有队列就设置了事件,然后在添加到队列中后才发出信号,我知道我可以做到,但是我非常想如果有的话,请使用OS内核原语。当然,此摘录来自手册页:
EVFILT_USER建立由标识标识的用户事件,该事件不是 与任何内核机制相关联,但由 用户级代码。
种种清除所有希望。然后是一个后续问题-是否还有其他MacOS内核机制的行为类似于事件和eventfd()
?
答案 0 :(得分:1)
您可以像在Linux上使用eventfd()
一样使用管道。
您还可以使用Mach端口和EVFILT_MACHPORT
。