2009-08-19 20 views
5

我正在開發我的操作系統項目的POSIX子系統,並且我已經達到了想要在pthreads支持上工作的地步。但是,我不確定我應該在多大程度上實施它們。實際上,通常使用哪種pthreads功能?

什麼是最常用的pthreads功能?有什麼我可以安全地「暫時擱置」,並在我們移植需要它的應用程序時執行它?到目前爲止,我的研究都指向了基本的線程操作(創建,連接等) - 這非常明顯 - 並且支持互斥體。實際上,應用程序的用途遠不止於此?

我想我只是想弄清楚,儘管仍然有一個工作實現,我可以逃脫多少。

回答

7

我建議一個光禿禿的骨頭並行線程執行包括以下功能(與 「pthread_」 前綴去掉):

  • 基本線程操作
    createexitjoindetachselfequal,和「attr」支持可連接性/可分離性
  • 流程整合
    atforkkillsigmask
  • 同步原語
    condmutex功能(默認屬性只 - !沒有什麼花哨),可能省略cond_timedwait

看看在SUSv6進入上<pthread.h>,這我優先於SUSv7鏈接,因爲版本6在此頭中有更多的選項組。我通過敲擊任何可選功能組成了上面的列表,然後刪除了我個人的歷史和觀察所暗示的其他功能,這些功能是非必要的(例如,線程特定的數據),或者既非必要又危險(例如,線程取消)。 :)

+0

謝謝。這只是我需要的那種信息。 – 2009-08-23 21:05:12

+0

我試圖弄清楚從哪裏開始,學習pthreads,結果在這裏:非常有用,幫助我瞭解哪些manpages要先到達!與原始問題並不真正相關,但是...對於我無關緊要的目的也是很好的答案!嗚:3 – ELLIOTTCABLE 2010-05-01 14:45:31

5

您肯定需要支持互斥鎖和條件變量,因爲如果沒有它們,線程將無法使用,並且它們都被廣泛使用。我想你可以逃脫而不支持信號量(我認爲這不是pthread的一部分),但我無法想象沒有它們的情況下做任何嚴肅的MT工作。

看看下一個建議的C++標準support threading並實現它所需的功能可能很有趣。如果你的操作系統可以支持未來的標準C++程序,它的狀態會非常好。

+0

+1撤銷downvote(downvoter:任何理由?)。感謝您的答案,尤其是對於C++鏈接。我們計劃將C++用於我們的本地API,因此您無意中指出了我完全不同區域的相關信息。 – 2009-08-19 08:14:33

+0

@Neil,可以使用'cond' vars和'mutex'來實現信號量,以解決缺乏「實時信號量」支持的問題。 – pilcrow 2009-08-20 05:38:51

+0

@pilcrow的確如此,但讓每個人重新實現這樣一個常用功能似乎有點令人遺憾 – 2009-08-20 07:41:13