glib的GAsyncQueue等价物C++?
glib's GAsyncQueue equivalent for C++?
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构建的)。
希望有帮助。好运!
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- python集合的C++等价物是什么.计数器
- C++中是否存在 std::conditional 的懒惰等价物?
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 在本征C++中 MKL 的函数"zgges"等价物是多少?
- 在C++中使用std或boost库的Qtimer等价物是什么
- GLM中的Java Matrix4.transform等价物
- 对于std::bitset,是否有一个ffs()等价物
- std::move() 或其在局部变量上的显式等价物可以允许 elision 吗?
- 这个 matlab 代码的C++等价物是什么(fread matlab vs fread C/C++)?
- 对于wchar_t,字符(0)或'