glib有一个名为GAsyncQueue
的数据结构,它允许没有信号量/锁/等的线程间通信,甚至使得实现生产者/消费者解决方案的任务变得微不足道。如果两个不同的线程将数据推送到GAsyncQueue
结构,则push
函数在内部实现对队列的互斥访问;更令人敬畏的是,如果一个线程调用pop
函数,并且那里没有数据,则调用线程会阻塞,直到一些其他线程将某些数据推入队列。所有这些都是以线程安全的方式完成的,对开发人员来说是透明的。
尽管我喜欢它,但这个库是为C语言构建的,对于更高级别的语言可能有更好的选择。我正在考虑使用glib,但在C ++代码中使用C库感觉很奇怪......
所以,问题是:是否有一个C ++推荐的glib等价物?更具体地说,是否有更推荐的C ++库提供与GAsyncQueue
相同的功能?
答案 0 :(得分:3)
在C ++程序中使用C绝对没有错(毕竟,C ++实现主要基于C运行时,例如C ++ 11线程支持不能没有pthread库,至少在UNIX®类平台上)。我绝对不会只选择工具/库并完全基于它所编写的语言。但是如果你必须使用其他东西,那么glib不是世界上唯一提供异步消息传递的库(顺便说一下,它看起来并不像它支持IPC)。无论如何,这里有一个C ++框架列表,它立即浮现在我的脑海中(随机顺序,随意而出我的想法):
每个人都有自己的优点和缺点,哪一个真正取决于你的要求是什么。我只能建议您关注整体应用程序体系结构以及异步消息传递如何适合应用程序的所有组件。例如,在涉及简单消息传递的或多或少复杂的应用程序中,此类异步队列通常与正在使用的事件通知机制集成(例如,OSX围绕kqueue/GCD构建)。
希望它有所帮助。祝你好运!