此文講述的執行緒為linux下,其執行緒庫函式是由posix標準定義的,稱為posix thread或者pthread。在linux上線程函式位於libpthread共享庫中,因此在編譯時要加上-lpthread選項。建立執行緒:
終止執行緒:
等待執行緒:
三個函式都為pthread.h中定義,其中要注意的是:
建立:
返回值:成功返回0,失敗返回錯誤號pthread庫的函式都是通過返回值返回錯誤號,雖然每個執行緒也都有乙個錯誤號errno,但這是為了相容其它函式介面而提供的,pthread庫本身並不使用它,通過返回值返回錯誤碼更加清晰;新的執行緒所執行的**由我們傳給pthread_create的函式指標start_routine決定;終止:
如果需要只終止某個執行緒而不終止整個程序,可以有三種方法:等待:1. 從執行緒函式return。這種方法對主線程不適用,從main函式return相當於呼叫exit。
2. 乙個執行緒可以呼叫pthread_cancel終⽌同⼀程序中的另⼀個執行緒。
3. 執行緒可以調⽤pthread_exit終止自己。
也就是指,當直接使用exit時,會將整個程序直接終止掉。
呼叫該函式的執行緒將掛起等待,直到id為thread的執行緒終止。 thread執行緒以不同的方法終止,通過pthread_join得到的終止狀態是不同的,總結如下:**測試:1. 如果thread執行緒通過return返回,value_ptr所指向的單元裡存放的是thread執行緒函式的返回值。
2. 如果thread執行緒被別的執行緒呼叫pthread_cancel異常終掉,value_ptr所指向的單元裡存放
的是常數pthread_canceled。
3. 如果thread執行緒是自己呼叫pthread_exit終止的,value_ptr所指向的單元存放的是傳給
pthread_exit的引數。 如果對thread執行緒的終止狀態不感興趣,可以傳null給value_ptr
引數。
執行緒是可結合的或者是可分離的,⼀個可結合的執行緒能夠被其他執行緒收回其資源和殺死。在被其他執行緒**之前,它的儲存器資源(例如私有棧)是不釋放的; 相反⼀個分離的執行緒是不能被其他執行緒**或殺死的,它的儲存器資源在它終⽌時由系統⾃動釋放。
而乙個執行緒預設屬性為可結合,每個可結合的執行緒都需要被顯示的呼叫pthread_join**,否則則會出現類似程序殭屍的現象。而在進行等待時,如果執行緒沒有返回則會僅從堵塞,如果你不想令其可結合,可呼叫pthread_detach(thread_id)讓執行緒分離,如此,該執行緒運⾏結束後會⾃動釋放所有資源。
Linux下執行緒實現
1.執行緒概述 程序是系統中程式執行和資源分配的基本單位。每個程序有自己的資料段 段和堆疊段。執行緒通常叫做輕型的程序。執行緒是在共享記憶體空間中併發執行的多道執行路徑,他們共享乙個程序的資源。因為執行緒和程序比起來很小,所以相對來說,執行緒花費更少的cpu資源。2.執行緒建立和退出 在linux中...
Linux下執行緒的操作
01 7 27 上午 10 39 13 介紹在linux下執行緒的建立和基本的使用。linux下的執行緒是乙個非常複雜的問題,由於我對執行緒的學習不時很好,我在這裡只是簡單的介紹執行緒的建立和基本的使用,關於執行緒的高階使用 如執行緒的屬性,執行緒的互斥,執行緒的同步等等問題 可以參考我後面給出的資...
Linux環境下執行緒的互斥
多個執行緒同時訪問共享資料時可能會衝突,這跟前面講訊號時所說的可重入性是同樣的問 題。比如 兩個執行緒都要把某個全域性變數增加1,這個操作在某平台需要三條指令完成 1.從記憶體讀變數值到暫存器 2.暫存器的值加1 3.將暫存器的值寫回記憶體 假設兩個執行緒在多處理器平台上同時執行這三條指令,則可能導...