glib的GAsyncQueue等价物C++?

glib's GAsyncQueue equivalent for C++?

本文关键字:C++ 等价物 GAsyncQueue glib      更新时间:2023-10-16

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

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

那么,问题是:是否有一个c++推荐的等效glib?更具体地说,是否有更推荐的c++库提供与GAsyncQueue相同的功能?

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

  • 英特尔线程构建模块
  • Boost MPI
  • 提振。ASIO
  • Qt

每一个都有自己的优点和缺点,使用哪一个真的取决于你的需求是什么。我只能建议您注意整个应用程序体系结构,以及异步消息传递如何适合应用程序的所有组件。例如,在涉及到比简单消息传递更复杂的应用程序中,这种异步队列通常与正在使用的事件通知机制集成(例如,OSX是围绕kqueue/GCD构建的)。

希望有帮助。好运!