2013-02-27 148 views
3

glib具有數據結構稱爲GAsyncQueue,它允許沒有信號量/鎖/等線程間通信,並且甚至使瑣碎實施生產者/消費者溶液的任務。如果兩個不同的線程將數據推送到GAsyncQueue結構,則push函數在內部實現對隊列的互斥訪問;更令人敬畏的是,如果一個線程調用pop函數,並且那裏沒有數據,調用線程將阻塞,直到某些數據被其他線程推入隊列。所有這些都是以線程安全的方式完成的,對開發人員來說是透明的。glib的GAsyncQueue等效於C++嗎?

,因爲我喜歡它一樣多,不過,這個庫是專爲C,並有可能成爲更高層次的語言更好的選擇。我在考慮使用無論如何巧舌如簧,但感覺奇怪的C++代碼使用C庫...

所以,問題是:是否有推薦++等值巧舌如簧一個C?更具體地說,是否有更多推薦的C++庫提供與GAsyncQueue相同的功能?

+0

用std :: queue',std :: mutex和std :: condition_variable'寫一個很容易 – 2013-02-27 18:17:33

+1

@JonathanWakely當然,我同意你的看法,這很容易,但是我寧願使用經過充分測試(可能優化)的消息隊列實現,而不是從頭開始自己的實現。 – 2013-02-27 18:21:19

回答

3

在C++程序中使用C絕對沒有錯(畢竟,C++實現主要基於C運行時,例如C++ 11線程支持不能沒有pthread庫,至少在類UNIX®平臺)。我絕對不會只選擇工具/庫,而是完全基於它所寫的語言。但是如果你必須使用其他的東西,那麼glib並不是世界上唯一提供異步消息傳遞的庫(順便說一下,它看起來並不像它支持IPC)。總之,這裏是立刻浮現在我的腦海裏(按隨機順序,因爲隨機的,因爲我的想法)的C++框架的列表:

每個人都有自己的長處和短處,以及使用哪一個取決於您的要求。我只能推薦您關注整體應用程序體系結構以及異步消息傳遞如何適合您的應用程序的所有組件。例如,在涉及比簡單的消息傳遞更多或多或少複雜的應用,諸如異步隊列常常與事件通知機制在使用(例如,OSX圍繞kqueue/GCD構建)集成。

希望它有幫助。祝你好運!

+0

IPC的好處,我的意思是線程間通信,而不明確使用同步原語。據此編輯。 – 2013-02-28 10:00:05