天天看點

Linux多線程基本API

程序 VS 線程

Linux多線程基本API

POSIX線程庫

與線程有關的函數構成了一個完整的系列,絕大多數函數的名字都是以“pthread_”開頭,要使用這些函數庫,要通過引入頭文<pthread.h>,而且連結這些線程函數庫時要使用編譯器指令的“-lpthread”選項[Ubuntu系列系統需要添加的是”-pthread”選項而不是”-lpthread”]

1.pthread_create

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

建立一個新的線程

參數

thread:線程ID

attr:設定線程的屬性,一般設定為NULL表示使用預設屬性

start_routine:是個函數位址,線程啟動後要執行的函數

arg:傳給線程啟動函數的參數

傳回值:成功傳回0;失敗傳回錯誤碼;

錯誤檢查

UNIX傳統的函數:成功傳回0,失敗傳回-1,并且對設定全局變量errno以指定錯誤類型。然而pthreads函數出錯時不會設定全局變量errno(而其他的大部分POSIX函數會設定errno)。而是将錯誤代碼通過傳回值傳回;

pthreads同樣也提供了線程内的errno變量,對于每一個線程, 都有一個errno的值, 以支援其它使用errno的代碼。對于pthreads函數的錯誤,建議通過傳回值進行判定,因為讀取傳回值要比讀取線程内的errno變量的開銷更小!

2.pthread_exit

線程終止

value_ptr:指向該線程的傳回值;注意:value_ptr不能指向一個局部變量。

3.pthread_join

等待線程結束

value_ptr:它指向一個指針,後者指向線程的傳回值(使用者擷取線程的傳回值)

線上程中同樣存在僵屍線程,子線程退出,主線程沒有pthread_join等待。将線程設定為脫離狀态可以避免僵屍線程

4.pthread_self

傳回線程ID

5.pthread_cancel

取消一個執行中的線程,由其他線程執行,屬于線程的它殺

參數:

thread: 線程ID

傳回值: 成功傳回0, 失敗傳回錯誤碼

6. pthread_detach 函數

将一個線程分離,避免僵屍線程

參數:

thread: 線程ID

傳回值: 成功傳回0, 失敗傳回錯誤碼

參考

https://blog.csdn.net/Alatebloomer/article/details/81939991

繼續閱讀