2009-04-21 94 views
5

在我的副本C Programming Language(又名:K & R)中,似乎沒有提到多線程。這本書是否比我想象中的完整?多線程編寫後是否出現?我在想這個錯誤的方式嗎?C多線程來源

多線程的概念適合C世界?


編輯:我覺得我原來的問題已:

  • 您可以用C寫什麼
  • 多線程存在
  • 你不能寫多線程用C < - 邏輯矛盾

這個矛盾解釋了什麼?多線程的起源在哪裏?如果是POSIX,那麼POSIX如果不是C寫入了什麼呢? C不可訪問的程序集形式?

+0

多線程只是不是C語言的一部分。當然,它可以由第三方庫添加,但C語言本身沒有線程的概念。 – jalf 2009-04-21 21:36:57

+0

@jalf實際上C11標準中有線程,他們必須添加它才能定義內存模型,但大部分支持的東西仍然在標準庫中。 – Spudd86 2012-12-10 20:34:06

回答

14

C是一個相當低級的語言。對典型C程序中的線程的支持來自操作系統,而不是來自C運行時 - 如果您的環境不支持線程,那麼您必須自己實現它們,找到一個可以實現它的庫,或者不需要線程。這與Java這樣的語言形成對比,運行時環境提供了許多服務,無論Java底層操作系統是否支持Java平臺公開的方式,Java程序都可以使用這些服務。

現在,我已經說了,我敢肯定,當第一版K & R發佈時,Unix不支持線程。由於C最初是作爲Unix環境的系統語言實現的,因此它沒有本地線程支持也就不足爲奇了。

如果你正在爲類似Unix的環境中編寫代碼,尋找POSIX線程,如果你需要在C.

4

實現多線程程序這本書是完整的一個很好的支持API。 C能夠運行線程,但只能在運行時支持它。 C本身不支持很多事情。例如,如果你想打開一個文件或從鼠標獲取輸入,你需要一個庫來爲你提供支持。這在某種程度上是很好的,因爲這意味着C可以在小型嵌入式計算機上運行,​​並且不需要大量內存來存儲您可能需要或可能不需要的功能。

多線程約爲C.之前的方式(根據本那:http://www.cs.clemson.edu/~mark/multithreading.html

你需要一個線程庫。例如,你可以將Windows:

#include "Windows.h" 

int main() 
{ 
    CreateThread(/*Google the function for details of the parameters.*/); 
    return 0; 
} 

你需要下載Windows平臺SDK做到這一點。大多數平臺都有某種sdk,它們會有一個庫,它有一些創建線程的函數。大多數函數都有一個CreateThread樣式函數,您可以在其中傳入想要新啓動的線程開始與您在主函數上開始的當前線程並行運行的函數地址。

您可能希望查找的標準化線程庫是posix。

3

如果我沒有記錯,多線程實際上比C編程語言晚得多。 POSIX Threads庫是在Unix/Linux程序中執行多線程的典型方式,不屬於標準庫。

1

之前肯定會出現多線程(或多處理)。然而,即使在現在,編程語言中的多線程支持也很少,特別是C沒有。所以我認爲你應該閱讀一本關於例如。 POSIX線程或任何支持你的環境的線程(現在線程庫彼此非常相似,至少在他們的同步原語的原則中; RCU等奇怪的東西只在特定的環境中使用)。

1

它確實提到它在我的副本(第2版),在導言章(第2):

同樣,C只提供簡單的,單一線程的控制流:測試,循環,分組和子程序,但不是多進程,並行操作,同步或協程。

2

C和C++語言不包含內置線程庫。因此,不同的平臺有不同的線程範例(PThreads,WinAPI CreateThread(..)函數,MFC線程等)。它似乎是C++ 0x will include a standard thread library