2010-10-18 54 views
1

我一直在用Java學習線程編程,其中有用於線程管理的複雜API。我最近遇到this。我很想知道這些是否現在被使用。 POSIX線程是否過時,還是現在用於C++線程的標準。除了Java以外,我不熟悉線程的其他語言。POSIX主題的範圍

回答

0

phtreads是當前標準的POSIX線程庫。他們錯過了一些重要的新事物,我希望他們會被更新以適應他們。而且C++ 1x標準還將包含一些內置的線程原語。

pthreads大多缺少原子值操作。例如,沒有線程安全的原始計數器操作,預計將被編譯爲1-5條機器指令。

這些都是需要的,因爲儘管volatile關鍵字的語義似乎表明您可能能夠將其用於某些這些事情,但事實並非如此。現代CPU以一種經常導致寫入讀寫的方式管理它們的L1,L2和L3高速緩存,不同CPU的讀寫順序不同。當前的優化編譯器可以對操作進行重新排序,因此它們發生的順序不再與它們在源代碼中出現的順序有很多相似之處。

Mutexes,即使是現代Linux版本,除非存在爭用,它們都可以避免任何系統調用,但對於參考計數等重量來說太重了。

C和C++可以改變,所以語言使這些保證一直髮生。但這與他們「高層集會」的精神背道而馳。