Linux kernel 用户空间(或用户空间设备驱动程序)中的工作队列

Linux kernel 用户空间(或用户空间设备驱动程序)中的工作队列,linux-kernel,pthreads,Linux Kernel,Pthreads,我正在研究在用户空间中实现的设备驱动程序(HDMI、HDCP) 现在,我正在用户空间中寻找类似于linux的工作队列功能 我想要的: a、 )将不同的工作/功能绑定到工作队列并运行它 b、 )能够在关闭驱动程序或重置驱动程序状态机时刷新工作队列。 c、 )添加延迟执行的工作项。 d、 )取消当前工作项等 我熟悉Linux内核工作队列和工作结构(虽然不是专家),因此,我很好奇我们如何在用户空间级别模拟类似的机制 也许,我可以通过使用pthreadapi将其与一些全局队列混合来编写这样的库 有什么想

我正在研究在用户空间中实现的设备驱动程序(HDMI、HDCP)

现在,我正在用户空间中寻找类似于linux的工作队列功能

我想要的:
a、 )将不同的工作/功能绑定到工作队列并运行它
b、 )能够在关闭驱动程序或重置驱动程序状态机时刷新工作队列。
c、 )添加延迟执行的工作项。
d、 )取消当前工作项等

我熟悉Linux内核工作队列和工作结构(虽然不是专家),因此,我很好奇我们如何在用户空间级别模拟类似的机制

也许,我可以通过使用pthreadapi将其与一些全局队列混合来编写这样的库


有什么想法/建议吗?

使用eventloop库,例如或可以完成工作。

是否有理由只创建一个线程来序列化工作?内核内部资源更为有限,创建许多内核线程的成本也更高。但在用户空间中,资源更为丰富。当需要新任务时,您应该可以创建新线程。如果需要延迟,请在线程句柄中使用其中一个睡眠函数(即usleep()、nano_sleep()等)。no.没有特别的理由只创建“一个线程”。我们可以创建许多用户线程。但是,如果我们每次在需要处理任何琐碎(或非琐碎)中断/事件时都要通过pthread_create_*和pthread_exit_uAPI,这难道不是一种过度杀伤力吗?据我所知,提前创建一个线程(或线程池)并将工作绑定到这些线程是相当容易的,而且会更快。我还没有做过研究,所以我不确定创建pthread需要多少开销,我也不确定这种开销是否会给应用程序带来负担。但我很好奇,你们谈论的中断只能在内核空间中完成。那么你有一个内核模块来处理这个问题吗?是的,我们有一个内核模块,它有一个典型的中断处理程序例程。不过,它只是将这些中断作为事件报告给上游并返回。不鼓励这样的设备驱动程序设计,但这是我现在最不关心的,因为我正在毫无疑问地获得事件!)我认为,如果你想坚持留在用户空间,你必须使用Pthread、Pthread互斥体,或者可能的futex,以及自定义队列数据结构来重新设计你自己的API。在我看来,这些都已内置到内核中,您应该将这些代码移植到内核中。谢谢@wkz。这些图书馆看起来很有趣。