linux c多執行緒總結:1:關於執行緒和程序
a:使用多執行緒的理由之一是和程序相比,它是一種非常"節儉
"的多工操作方式。我們知道,在linux系統下,啟動乙個新的程序必須分配給
它獨立的位址空間,建立眾多的資料表來維護它的**段、堆疊段和資料段,這是一種"昂貴
"的多工工作方式。而執行於乙個程序中的多個
執行緒,它們彼此之間使用相同的位址空間,共享大部分資料,啟動乙個執行緒所花費的空間遠遠小於啟動乙個程序所花費的空間,而且,執行緒間
彼此切換所需的時間也遠遠小於程序間切換所需要的時間。
b:使用多執行緒的理由之二是執行緒間方便的通訊機制。對不同程序來說,它們具有獨立的資料空間,要進行資料的傳遞只能通過通訊的方式進行,
這種方式不僅費時,而且很不方便。執行緒則不然,由於同一程序下的執行緒之間共享資料空間,所以乙個執行緒的資料可以直接為其它執行緒所用,
這不僅快捷,而且方便。當然,資料的共享也帶來其他一些問題,有的變數不能同時被兩個執行緒所修改,有的子程式中宣告為static的資料
更有可能給多執行緒程式帶來災難性的打擊,這些正是編寫多執行緒程式時最需要注意的地方。
2:執行緒的基本操作步驟:
a:宣告執行緒識別符號變數
pthread_t xx;
b:寫執行緒操作函式
void
threadfunction()
c:如果需要對某些變數和操作加鎖,那麼先宣告乙個執行緒鎖識別符號變數,並且初始化
pthread_mutex_t mut;
pthread_mutex_init(&mut,null);
//子執行緒中
pthread_mutex_lock(&mut);
...//在需要加鎖的地方前後加上
pthread_mutex_unlock(&mut);
d:建立執行執行緒
pthread_create(
1,2,3,4);//
1:執行緒識別符號方便以後對該執行緒的操作,因為乙個執行緒函式可以被建立為多個執行緒,2:執行緒屬性,3:執行緒函式,4:函式引數
e:結束執行緒
主線程中:(阻塞函式)pthread_join(
1,2)//
1:xc識別符號,2:儲存函式返回值的指標
子執行緒中:pthread_exit(1)//
1:儲存返回值
3:關於執行緒屬性:
屬性結構為pthread_attr_t,它同樣在標頭檔案/usr/include/pthread.h中定義。屬性值不能直接設定,
須使用相關函式進行操作,初始化的函式為pthread_attr_init,這個函式必須在pthread_create函式
之前呼叫。屬性物件主要包括是否繫結、是否分離、堆疊位址、堆疊大小、優先順序。預設的屬性為非
繫結、非分離、預設1m的堆疊、與父程序同樣級別的優先順序。
除了可以在pthread_create中第二個引數那裡設定屬性以外,還可以通過函式pthread_attr_setscope()設定繫結狀態,
使用pthread_detach()設定分離狀態,使用pthread_attr_setschedparam()設定優先順序
Linux多執行緒程式設計(2)執行緒同步
執行緒同步 a.mutex 互斥量 多個執行緒同時訪問共享資料時可能會衝突,這跟前面講訊號時所說的可重要性是同樣的問 題。假如 兩個執行緒都要把某個全域性變數增加1,這個操作在某平台需要三條指令完成 1.從記憶體讀變數值到暫存器 2.暫存器的值加1 3.將暫存器的值寫回記憶體 我們通過乙個簡單的程式...
Linux多執行緒程式設計入門 2
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在上面的例子中,我們採用了執行緒的預設屬性,即為非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當 pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執...
Linux多執行緒實踐 2 執行緒基本API
與執行緒有關的函式構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 開頭,要使用這些函式庫,要通過引入頭文,而且鏈結這些執行緒函式庫時要使用編譯器命令的 lpthread 選項 ubuntu系列系統需要新增的是 pthread 選項而不是 lpthread 如ubuntu 14.04版...