0

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

我本来打算使用 pthreads 来实现这个,但是 glib 文档本身建议应该使用带有上下文的主循环而不是线程来附加源和调度回调。

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

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

4

1 回答 1

4

GLib 是 Gnome 项目的一部分。它首先是在考虑 GUI 应用程序的情况下构建的,尽管它不限于这种用途。它的 GUI 编程模型是典型的基于事件的模型,由接收事件并将它们适当地分派给组件的主循环驱动。您应该从这个角度解释文档。

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

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

于 2019-06-28T15:03:43.270 回答