Glib线程与GMain循环事件

时间:2019-06-27 12:24:56

标签: c pthreads glib mainloop

我有一个简单的系统,其中有一个GList结构。有两个线程:比如说Head(),它导致数据进入GList结构。另一个线程Tail()导致列表尾部的数据流出(及其处理)。

我原本打算使用pthreads实现此功能,但glib文档本身建议,应使用带有上下文的主循环代替线程,以附加源和调度回调。

总的来说,不清楚glib主循环,主上下文和源系统试图解决什么问题。我所能收集到的就是它能找到读取套接字数据的应用程序,它与poll()的并行性以及UI事件系统。

GlibMainLoop系统的用例是什么?就我的问题陈述而言,它适用吗?

1 个答案:

答案 0 :(得分:3)

GLib是Gnome项目的一部分。它的构建首先考虑了GUI应用程序,但不仅限于此用途。它的GUI编程模型是典型的基于事件的模型,由主循环驱动,该主循环接收事件并将事件适当地分配给组件。您应该以此为准来解释文档。

听起来您的不是GUI应用程序,唯一的GLib关联就是它对GList的使用。在那种情况下,我发现GList有点令人怀疑,但不一定是错误的选择。选择GList并不意味着您应该致力于事件驱动的程序设计,如果不这样做,那么您可能就没有使用GLib主事件循环了。

尽管如此,事件驱动的设计可能会很好地为您服务,并且在某些方面它比多线程设计更简单。在很大程度上取决于生产者和消费者应该做什么的细节。