【问题标题】:glib's GAsyncQueue equivalent for C++?与 C++ 等效的 glib 的 GAsyncQueue?
【发布时间】:2013-02-27 17:53:43
【问题描述】:

glib 有一个名为GAsyncQueue 的数据结构,它允许在没有信号量/锁等的情况下进行线程间通信,甚至使实现生产者/消费者解决方案的任务变得微不足道。如果两个不同的线程向一个GAsyncQueue结构推送数据,push函数内部实现了对队列的互斥访问;更可怕的是,如果一个线程调用pop 函数,并且那里没有数据,调用线程会阻​​塞,直到一些数据被其他线程推入队列。所有这些都以线程安全的方式完成,对开发人员透明。

尽管我很喜欢它,但这个库是为 C 构建的,对于高级语言可能有更好的替代方案。反正我正在考虑使用 glib,但是在 C++ 代码中使用 C 库感觉很奇怪...

所以,问题是:是否有 C++ 推荐的 glib 等效项?更具体地说,是否有更推荐的 C++ 库提供与GAsyncQueue 相同的功能?

【问题讨论】:

  • std::queuestd::mutexstd::condition_variable 编写一个非常容易
  • @JonathanWakely 当然,我同意你的观点,这很容易,但我更愿意使用经过良好测试(并且可能优化)的消息队列实现,而不是推出我自己的从头开始。

标签: c++ c synchronization glib


【解决方案1】:

在 C++ 程序中使用 C 绝对没有错(毕竟,C++ 实现很大程度上基于 C 运行时,例如,如果没有 pthread 库,C++11 线程支持就无法生存,至少在类 UNIX® 平台上)。我绝对不会只选择工具/库,完全基于它编写的语言。但如果你必须使用其他东西,那么 glib 不是世界上唯一提供异步消息传递的库(顺便说一下,它看起来并不真正支持IPC)。无论如何,这是我立即想到的 C++ 框架列表(以随机顺序,与我的想法一样随机):

每一种都有自己的长处和短处,使用哪一种真正取决于您的具体要求。我只能建议您注意整体应用程序架构以及异步消息传递是否适合应用程序的所有组件。例如,在涉及多于简单消息传递的或多或少复杂的应用程序中,此类异步队列通常与正在使用的事件通知机制集成(例如,OSX 是围绕kqueue/GCD 构建的)。

希望对您有所帮助。祝你好运!

【讨论】:

  • 关于 IPC 的好点,我的意思是线程间通信没有明确使用同步原语。相应地进行了编辑。
猜你喜欢
  • 2012-03-02
  • 2018-10-31
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2019-06-26
  • 2010-12-03
相关资源
最近更新 更多