2010-10-17 94 views
-1

我不想重新發明輪子,而我正在尋找的東西很可能已經存在於FOSS世界中。基於多線程的基於pthread的多線程實用程序庫

我正在尋找一個pthread基礎實用程序庫,它實現了經常使用的基元來進行線程之間的通信。

我的主要需求是爲固定大小的消息提供某種阻塞隊列,並且能夠等待數據同時到達多個隊列(通常使用poll和select使用文件句柄)。

是否有這樣的事情存在?

編程語言是C++,但我很好用C庫。操作系統是Linux,但任何posix都可以。

編輯

我不是在尋找周邊的並行線程瘦包裝(如升壓::線程左右)。我已經有了這個運行。我正在尋找更高層次的基元。基本上什麼java.util.concurrancey爲java傢伙提供。

回答

0

你可以嘗試OpenMP,雖然我不確定它是否基於pthread API。

+0

OpenMP不是我要找的。它會幫助我平行的程序。我的程序已經在使用線程,但在線程之間傳遞消息/數據的粘合代碼是我正在尋找的。 (我的膠水代碼可行,但從長遠來看,我需要更好的東西) – 2010-10-17 19:12:17

2

你的要求,已經烤成POSIX Message Queues

而不是使用select(),你可以做到相反。而不是在select()中等待,您可以使用mq_notify()來告訴您何時需要閱讀。 MQ爲您提供傳遞信號或讓它們產生新線程來讀取隊列的選項。

如果你真的打算使用select(),Linux會使這種方式變得無痛苦,因爲mqd_t類型實際上是一個文件描述符。您可以像使用select()中的任何其他FD一樣簡單地使用從mq_open()返回的mqd_t。

請注意,在select()中使用mqd_t是不可移植的。理論上你應該能夠在其他系統上做類似的事情,但我從來沒有測試過它。由於POSIX MQ具有到文件系統入口的路徑,因此應該能夠對路徑執行open open(),並在select()中使用返回的文件描述符,將其映射到mq_open()中使用的mqd_t以確定要讀取的隊列。再一次,我從來沒有嘗試過。

1

總是有boost :: thread。