linux執行緒 二

2021-06-08 18:12:50 字數 1295 閱讀 5861

這裡要講的執行緒相關操作都是使用者空間執行緒的操作。在linux中,一般pthread執行緒庫是一套通用的執行緒庫,是由posix提出的,因此具有很好的可移植性。

為什麼要用執行緒:(其實現在我用不到,哈哈)

程序是系統中程式執行和資源分配的基本單位。每個程序都擁有自己的資料段、**段和堆疊段,這就造成了程序在進行切換等操作時都需要有比較負責的上下文切換等動作。為了進一步減少處理機的空轉時間支援多處理器和減少上下文切換開銷,程序

在演化中出現了另乙個概念——執行緒。它是乙個程序內的基本排程單位,也可以稱為輕量級程序。執行緒是在共享記憶體空間中併發的多道執行路徑,它們共享乙個程序的資源,如檔案描述和訊號處理。因此,大大減少了上下文切換的開銷。

1.執行緒建立

函式說明

#include

int pthread_create ((pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)) ;

其中thread:執行緒識別符號

attr:執行緒屬性設定

void *(*start_routine)(void *):是乙個函式指標(見程式)

成功返回0 失敗返回-1

2。執行緒退出

#include

void pthread_exit(void *retval);

函式傳入值retval:pthread_exit()呼叫者執行緒的返回值,可由其他函式如 pthread_join 來檢索獲取

3.調入執行緒

#include

int pthread_join((pthread_t th,void **thread_return);

其中 th:等待執行緒的識別符號

thread_return :使用者定義的指標,用來儲存被等待執行緒的返回值(不為null時)

/*乙個簡單的小執行緒測試程式*/

#include

#include

void thread1(void)    /*第三步:編寫pthread_join()要呼叫的函式*/

}void thread2(void)

}int main(void)

ret=pthread_create(&id2,null,(void *)thread2,null);

if(ret!=0)

pthread_join(id1,null);                    /*第二步呼叫pthread_join();*/

pthread_join(id2,null);

return 0;

}

linux 執行緒同步(二)

訊號量 訊號量是相互排斥鎖的公升級版把相互排斥鎖中1變成了n。舉個簡單的樣例 如果如今有10個人,有一部手機。這10個人都競爭來使用手機打 這就是相互排斥鎖。對於訊號量,如今可能是有4部手機,這10個人都競爭來使用手機打 相比相互排斥鎖訊號量由1變成了4。訊號量相也就是作業系統中pv操作,它廣泛應用...

Linux 執行緒安全(二)

標頭檔案 include1.定義 sem t sem 2.初始化 sem init sem t sem,int pshared,int value sem 傳入訊號量的位址 pshared 0代表執行緒 1代表程序 value 實際資源個數,用於訊號量初始化3.等待 sem wait sem t s...

linux下的執行緒(二)

清除 執行緒終止有兩種情況 1 正常終止 2 非正常終止 1 正常終止 執行緒主動呼叫pthread exit或者從執行緒函式中return都將使執行緒正常退出,這是可預見的退出方式 2 非正常終止 執行緒在其他執行緒的干預下,或者由於自身執行出錯 比如訪問非法位址 而退出,這種退出方式是不可預見的...