4

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

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

所以,问题是:是否有 C++ 推荐的 glib 等价物?更具体地说,是否有更推荐的 C++ 库提供与GAsyncQueue

4

1 回答 1

3

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

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

希望能帮助到你。祝你好运!

于 2013-02-27T18:32:15.083 回答