程序 VS 線程

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