linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。編寫linux下的多執行緒程式,需要使用標頭檔案pthread.h,連線時需要使用庫libpthread.a。
gcc -lpthread helloworld.c -o helloworld
#include
int pthread_create(pthread_t * tidp,const pthread_attr_t *attr,void *(*start_rtn)(void),void *arg);
如果程序中任何乙個執行緒中呼叫exit或_exit,那麼整個程序都會終止。執行緒的正常退出方式有:
(1) 執行緒從啟動例程中返回;
(2) 執行緒可以被程序中的另乙個線程程終止;
(3) 執行緒自己呼叫pthread_exit函式。
#include
void pthread_exit(void * rval_ptr);
#include
int pthread_join(pthread_t tid,void **rval_ptr);
阻塞呼叫執行緒,直到指定的執行緒終止。
tid :等待退出的執行緒id;
rval_ptr:執行緒退出的返回值的指標;
返回值:成功返回0,否則返回非0。
#include
pthread_t pthread_self(void)
獲取呼叫執行緒的執行緒標識。
執行緒終止有兩種情況:正常終止和非正常終止。執行緒主動呼叫pthread_exit或者從執行緒函式中return都將使執行緒正常退出,這是可預見的退出方式;非正常終止是執行緒在其他執行緒的干預下,或者由於自身執行
出錯(比如訪問非法位址)而退出,這種退出方式是不可預見的。
不論是可預見的執行緒終止還是異常終止,都會存在資源釋放的問題,如何保證執行緒終止時能順利的釋放掉自己所占用的資源,是乙個必須考慮解決的問題。
在posix執行緒api中提供了乙個pthread_cleanup_push()/pthread_cleanup_pop()函式對用於自動釋放資源 –從pthread_cleanup_push()的呼叫點到pthread_cleanup_pop()之間的程式段中的終止動作(包括呼叫 pthread_exit()和取消點終止)都將執行pthread_cleanup_push()所指定的清理函式。
#include void pthread_cleanup_push(void (*rtn)(void *),void *arg);
將清除函式壓入清除棧。
- rtn:清除函式(函式指標)
- arg:清除函式的引數
#include
void pthread_cleanup_pop(int execute);
將清除函式彈出清除棧。
- execute執行到pthread_cleanup_pop()時是否在彈出清理函式的同時執行該函式,非0:執行; 0:不執行。
待續
Linux筆記 9 Linux網路概述
linux網路概述 一 linux網路優勢 linux為使用者提供了完善的 強大的網路功能。1,完善的內建網路。其他作業系統不包含如此緊密地和核心結合在一起的網路部分。2,linux 免費提供了大量支援 internet 的軟體,internet 是在 unix 領域中 建立並繁榮起來的,在這方面使...
Linux驅動開發 9 Linux定時器
1.定時器是對機器時鐘中斷的應用 2.核心提供一組資料結構來完成定時觸發工作或者完成週期性的事務 3.作業系統中,一般不允許使用for 迴圈來延時,一般使用定時器來完成延時功能 4.jiffies 表當前時間,hz表示延遲1s 5.資料結構 struct timer list 6.相關函式 a 初始...
多執行緒9 執行緒池
從原始碼中可以看出,執行緒池的建構函式有7個引數,分別是corepoolsize maximumpoolsize keepalivetime unit workqueue threadfactory handler 一 corepoolsize 執行緒池核心執行緒大小 執行緒池中會維護乙個最小的執行...