1樓:
雖然 thread 類的初始化可以提供這麼豐富和方便的形式,其實現的底層依然是建立一個 pthread 執行緒並執行之,有些實現甚至是直接呼叫 pthread_create 來建立。
建立一個執行緒之後,我們還需要考慮一個問題:該如何處理這個執行緒的結束?一種方式是等待這個執行緒結束,在一個合適的地方呼叫 thread 例項的 join() 方法,呼叫者執行緒將會一直等待著目標執行緒的結束,當目標執行緒結束之後呼叫者執行緒繼續執行;另一個方式是將這個執行緒分離,由其自己結束,通過呼叫 thread 例項的 detach() 方法將目標執行緒置於分離模式。
一個執行緒的 join() 方法與 detach() 方法只能呼叫一次,不能在呼叫了 join() 之後又呼叫 detach(),也不能在呼叫 detach() 之後又呼叫 join(),在呼叫了 join() 或者 detach() 之後,該執行緒的 id 即被置為預設值(空執行緒),表示不能繼續再對該執行緒作修改變化。如果沒有呼叫 join() 或者 detach(),那麼,在析構的時候,該執行緒例項將會呼叫 std::terminate(),這會導致整個程序退出,所以,如果沒有特別需要,一般都建議在生成子執行緒後呼叫其 join() 方法等待其退出,這樣子最起碼知道這些子執行緒在什麼時候已經確保結束。
2樓:75_飛星
執行緒是操作體統提供的功能,任何執行緒最終都需要呼叫系統提供的函式。也就是說c++11中的thread庫是對系統api的封裝
linux作業系統是用c++還是c語言寫的?
3樓:科力爾
linux核心是用c和彙編寫的,不是c++
kde桌面環境,就是用qt寫的,qt是c++的一個程式開發框架
linux主要還是用c語言
4樓:匿名使用者
準確地說:linux核心是由c和彙編寫的,涉及作業系統那就多了,c不可能完全解決所有方案吧
5樓:
c和彙編的共同威力促成了linux的誕生
c語言是可以寫圖形介面的,只是相當繁瑣,你沒看到知道經常有人問c繪製窗體的問題嗎?
c語言絕大多數是寫的單執行緒,但他可以應用於任何平臺(我的意思是,通過不同的編譯器)
6樓:匿名使用者
linux是是一個用c語言和組合語言寫成,符合posix標準的類unix作業系統。
c語言也有圖形介面、選單等設計啊。
c語言的開始設計,並未設計多執行緒的機制,由於隨著軟硬體的發展及需求的發展。後來c語言才發開了執行緒庫以支援多執行緒的操作、應用。 主要基於linux介紹c多執行緒。
在編譯c的多執行緒時候,一方面必須指定linux c語言執行緒庫多執行緒庫pthread,才可以正確編譯(例如:gcc test.c -o test -lpthread);另一方面要包含有關執行緒標頭檔案#include 。
7樓:匿名使用者
linux是c和c++編寫的,以前的小型機的作業系統都是c寫的,linux作業系統是從unix作業系統演化而來的。由於linux的核心是完全公開的,因此受到的攻擊也比較小,也更加完善。源**在網上也能查到。
可惜,由於本人水平有限,查到了也讀不懂(主要讀不懂註釋),也許你可以。
另外,用c語言寫介面,目前看來簡直就是妄想了,一沒有必要;二c目前就用在底層。
c只是一種開發語言,在單執行緒的作業系統中,開發多執行緒程式是沒有必要的,在多執行緒、多程序作業系統中,如果仍然進行單執行緒的開發那有些無用了。因此說,單執行緒的c開發目前在嵌入式作業系統中仍有市場,例如在windows ce、linux等作業系統中,單執行緒程式設計沒有太多的使用價值,個人認為微控制器開發似乎還有一些市場。
8樓:匿名使用者
python的可以移植
9樓:你不知我不知道
linux最早是從unix發展而來,最初是由c語言編寫,當時還沒c++,最早沒有圖形介面,之後開發了圖形介面庫之後就有了圖形介面,linux支援c以及c++,有對應的編譯器,圖形介面庫也是開源的,可以找到原始碼的
dos是微軟開發的系統,不是開源系統,是採用命令方式。
c語言只是一種程式語言在不同的編譯器下編譯出可以執行的程式,微軟的dos或windows系列系統下的可執行程式和linux的可執行程式不一樣,但是同一**編出來的功能是相同的
10樓:
這個問題不是很清楚了,圖形介面的話可以用mfc,是c++的
我是一個c++程式設計師,現在想在linux下寫多執行緒,一定要用c來寫嗎?我對c有牴觸情緒
11樓:匿名使用者
多執行緒的api是c的,沒辦法,但是,在開始的時候,一般會將其封閉為c++執行緒類,當然,可以自己去封裝,也可以使用開源的第三方庫。
學習c++多執行緒程式設計主要用pthread還是c++
12樓:
pthreads 就像它的名稱一樣,是一種適用於多平臺可移植的多執行緒操作庫,在 windows 上 pthreads 的下層就是 win32 多執行緒 api。
pthreads 庫是 c 語言介面,因此 c 和 c++ 都能使用。
如果想用 c++ 的跨平臺多執行緒 api 可以用 boost.thread
如果不想跨平臺,那就用 native api 就可以了,比如 windows 的 mfc 中的 cwinthread 類。
用哪個庫,取決去工程的目標平臺和將來的移植打算。
13樓:匿名使用者
如果只在 linux 下程式設計,那麼 c++11 的 thread 的附加值幾乎為零(我認為它過度設計了,同時損失了一些功能),你自己把 pthreads 封裝成一個簡單好用的執行緒庫只需要兩三百行**,用十幾個 pthreads 函式實現 4 個 class:thread、mutex、lock_guard、condvar,而且 raii 的好處也享受到了。
c++11的std::thread能用類的成員函式構造一個執行緒嗎?語法怎樣?
14樓:匿名使用者
物件名, ipara)
如果run是靜態成員函式就不用寫物件名了
15樓:匿名使用者
如果run返回不是void就不支援(boost的thread是支援的),所以std::thread yyy([&]);
關於c++11 中的thread::detach()函式的問題
16樓:匿名使用者
啟動函式執行完之後
detach()只是使thread物件與這個執行緒無關而已,原來的執行緒該怎麼執行就怎麼執行
17樓:匿名使用者
detach呼叫之後,目標執行緒就成為了守護執行緒,駐留後臺執行,與之關聯的std::thread物件失去對目標執行緒的關聯,無法再通過std::thread物件取得該執行緒的控制權。
當執行緒主函式執行完之後,執行緒就結束了,執行時庫負責清理與該執行緒相關的資源。
當一個thread物件到達生命期終點而關聯執行緒還沒有結束時,則thread物件取消與執行緒之間的關聯,目標執行緒執行緒則變為分離執行緒繼續執行。
當呼叫join函式時,呼叫執行緒阻塞等待目標執行緒終止,然後**目標執行緒的資源。
linux是多執行緒還是多程序
18樓:良玉小帝
程序:可執行程式是儲存在磁碟裝置上的由**和資料按某種格式組織的靜態實體,而程序是可被排程的**的動態執行。在linux系統中,每個程序都有各自的生命週期。
在一個程序的生命週期中,都有各自的執行環境以及所需的資源,這些資訊都記錄在各自的程序控制塊中,以便系統對這些程序進行有效的管理,程序控制塊的結構如下圖所示:
每個程序都有各自獨立的虛擬地址空間,空間的大小與所基於的硬體體系結構有關。虛擬空間中各區代表的意義,**段儲存指令序列和只讀資料,多個程序例項可共享**段。資料段用來存放全域性變數和靜態變數。
堆區域用於程式的動態記憶體管理,new或者malloc申請的記憶體就位於堆中。棧用來存放程序執行過程中的區域性變數,函式返回地址,引數和程序上下文環境。
執行緒:引入程序是為了解決程式併發執行的問題,而引入執行緒是為了減少程式併發所帶來的時間和空間的開銷,執行緒是比程序更小的單位,一個程序至少有一個執行緒,執行緒是作業系統進行排程的基本單位,執行緒基本上不佔用系統資源,執行緒與其他同屬一個程序的執行緒共享該程序所佔有的資源。
linux是個系統,支援各種服務,服務可以開啟多程序,程序可以開啟多執行緒
19樓:大大蟲
既多程序也多執行緒,看程式怎麼實現
請問linux下C程式設計多執行緒同步和非同步的區別,如何能實現程式的同步和非同步程式設計
同步就是使得兩個或者多個程序之間的行為按照一定的時序來執行。比如說執行緒a完成了某件事,然後執行緒b才能做某件事。具體一點,就是,執行緒間的某個動作執行前需要確認一個或者多個其他執行緒的當前狀態。而非同步則是多個執行緒各跑各的,互不干涉。linux下的多執行緒實現由pthread庫提供,標頭檔案為p...
C 如何運用多執行緒 5,C 中構建多執行緒應用程式
thread th1 new thread new threadstart aa 執行緒1 thread th2 new thread new threadstart aa 執行緒2 thread th3 new thread new threadstart aa 執行緒3 執行緒1啟動。執行緒2啟...
c 的執行緒和程序的區別,C 多執行緒多程序問題
執行緒是指程序內的一個執行單元,也是程序內的可排程實體.與程序的區別 1 地址空間 程序內的一個執行單元 程序至少有一個執行緒 它們共享程序的地址空間 而程序有自己獨立的地址空間 2 資源擁有 程序是資源分配和擁有的單位,同一個程序內的執行緒共享程序的資源 3 執行緒是處理器排程的基本單位,但程序不...