1烁登、在只有一個控制線程的情況下教藻,一個單線程進(jìn)程要完成多個任務(wù)柳譬,只需要把這些任務(wù)串行化倒戏,但有多個控制線程時,相互獨立的任務(wù)的處理就可以交叉進(jìn)行憔足,此時只需要為每個任務(wù)分配一個單獨的線程,當(dāng)然只有在兩個任務(wù)的處理過程互不依賴的情況下,兩個任務(wù)才可以交叉執(zhí)行垦搬。
2、交互的程序同樣可以通過使用多線程來改善響應(yīng)時間艳汽,多線程可以把程序中處理用戶輸入輸出的部分與其他部分分開
線程標(biāo)識
1猴贰、每個線程也有一個線程ID,進(jìn)程ID在整個系統(tǒng)中是唯一的河狐,但是線程ID不同米绕,線程ID只有在它所屬的進(jìn)程上下文中才有意義
2瑟捣、進(jìn)程ID是用pid_t數(shù)據(jù)類型來表示的,是一個非負(fù)整數(shù)栅干。線程ID是用pthread_t數(shù)據(jù)類型來表示迈套。
#include <pthread.h>
int pthread_equal(pthread_t id1, pthread_t id2)
返回值:若相等,返回非0數(shù)值碱鳞,否則桑李,返回0
作用:對兩個線程ID進(jìn)行比較
#include <pthread.h>
pthread_t pthread_self(void)
返回值:調(diào)用線程的線程ID
作用:線程調(diào)用該函數(shù)獲得自身的線程ID
線程創(chuàng)建
1、在POSIX線程(pthread)的情況下劫笙,程序開始運(yùn)行時芙扎,它也是以單進(jìn)程中的單個控制線程啟動的。在創(chuàng)建多個控制線程之前填大,程序的行為與傳統(tǒng)的進(jìn)程并沒有什么區(qū)別
int pthread_create(pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void*),
void *arg)
返回值:若成功戒洼,返回0,否則允华,返回錯誤編號
作用:創(chuàng)建一個線程
當(dāng)pthread_create成功返回時圈浇,新創(chuàng)建線程的線程ID會被設(shè)置成thread指向的內(nèi)存單元,attr參數(shù)用于定制各種不同的線程屬性靴寂,如果把其置為NULL磷蜀,則是默認(rèn)屬性,新創(chuàng)建的線程從start_routine函數(shù)的地址開始運(yùn)行百炬,該函數(shù)只有一個無類型指針參數(shù)arg褐隆,如果需要向start_routine函數(shù)傳遞的參數(shù)有一個以上(一個以上),那么需要把這些參數(shù)放到一個結(jié)構(gòu)中剖踊,然后把這個結(jié)構(gòu)的地址作為arg參數(shù)傳入庶弃。
線程終止
1、單個線程可以通過3種方式退出
(1)線程可以簡單地從啟動例程中返回德澈,返回值是線程的退出碼
(2)線程可以被同一進(jìn)程中的其他線程取消
(3)線程調(diào)用pthread_exit
#include <pthread.h>
void pthread_exit(void *ptr)
ptr參數(shù)是一個無類型指針歇攻,與傳給啟動例程的單個參數(shù)類似。
進(jìn)程中的其他線程也可以通過調(diào)用pthread_join函數(shù)訪問這個指針
#include <pthread.h>
int pthread_join(pthread_t thread, void **ptr)
返回值:若成功梆造,返回0缴守,否則返回錯誤編碼
(未完待續(xù))