簡體   English   中英

C多線程起源

[英]C multi-threading origin

在我的C編程語言 (又名:K&R)中,似乎沒有提到多線程。 這本書不如我想象的那么完整嗎? 多線程在寫完之后出現了嗎? 我是否以錯誤的方式思考這個問題?

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


編輯:我認為我原來的問題是:

  • 你可以用C寫任何東西
  • 多線程存在
  • 你不能在C < - 邏輯矛盾中寫多線程

這個矛盾是什么原因造成的? 多線程的起源在哪里? 如果是POSIX,那么如果不是C,那么POSIX寫的是什么? C無法訪問的一種裝配形式?

C是一種非常低級的語言。 對典型C程序中的線程的支持來自操作系統,而不是來自C運行時 - 如果您的環境不支持線程,那么您必須自己實現它們,找到一個執行它的庫,或者沒有線程。 這與Java之類的語言形成對比,在Java語言中,運行時環境提供了許多保證可供Java程序使用的服務,無論底層操作系統是否以Java平台公開的方式支持它們。

現在,說了這些,我很確定在第一版K&R發布時,Unix不支持線程。 由於C最初是作為Unix環境的系統語言實現的,因此它沒有本機線程支持也就不足為奇了。

如果您正在為類似Unix的環境編寫代碼,那么在需要一個支持良好的API以在C中實現多線程程序時,請查找POSIX線程。

這本書很完整。 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樣式函數,您可以在其中傳入一個函數的地址,您希望新啟動的線程與您在main函數上開始的當前線程並行運行。

您可能想要查找的標准化線程庫是posix。

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

C和C ++語言不包含內置的線程庫。 因此,不同的平台具有不同的線程(PThreads,WinAPI CreateThread(..)函數,MFC線程等)。

似乎C ++ 0x 將包含一個標准的線程庫

多線程(或多處理)肯定在此之前出現。 然而,即使現在,編程語言中的多線程支持也很少,特別是C沒有。 所以我認為你應該讀一本關於eg的書。 POSIX線程,或者你的環境為你提供的任何線程支持(線程庫現在彼此非常相似,至少在它們的同步原語的原則中;像RCU這樣的奇怪的事情只在特定的環境中使用)。

它確實在我的副本(第2版),引言章節(第2頁)中提到它:

類似地,C僅提供簡單的單線程控制流程:測試,循環,分組和子程序,但不提供多道程序設計,並行操作,同步或協同程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM