快速做網(wǎng)站的軟件網(wǎng)站規(guī)劃與設(shè)計
方式1
pthread_exit
Void? pthread_exit (void *retval)
功能:
??? 結(jié)束調(diào)用的線程
參數(shù):
??? retval?? //退出狀態(tài)值?? //需要傳的是,退出狀態(tài)值的地址
注意:
??? 1.pthread_exit?? 本身表示結(jié)束線程
????? 如果用在main函數(shù)中 表示結(jié)束主線程
????? 主線程結(jié)束?? 并不表示進程
方式2:
在次線程中return
此時的效果相當于調(diào)用了pthread_exit()
方式3:
調(diào)用pthread_cancel(pthread_t pthread)
功能:
??? 通過發(fā)送取消的請求來結(jié)束次線程
參數(shù);
???? pthread:要結(jié)束的線程的tid號
線程的資源回收
Int pthread_join(pthread_t thread,void **retval)
功能:
????? 等待線程結(jié)束
參數(shù):
返回值:
???? 成功? 0
???? 失敗? 錯誤碼
注:
?? 線程退出時,可以帶出退戶狀態(tài)值
?? 但是傳的是
1.pthread_join? //需要自己回收? -----線程的屬性(可結(jié)合性)? --一般是子線程? 在短時間內(nèi)運行完
2.//可分離屬性?? ----子線程運行很久才結(jié)束? ---設(shè)置分離屬性
函數(shù):
Pthread_detach()
Int pthread_detach(pthread_t thread);
功能:
??? 分離線程
參數(shù):
??? thread? 要分離的線程的tid
返回值:
?? 成功?? 0
?? 失敗?? 錯誤碼
對比 線程 和 進程
1.線程 vs? 進程
線程 cpu 執(zhí)行的最小單位
進程 資源分配和任務(wù)調(diào)度的最小單位
2.各自特點(優(yōu)缺點)
//1.創(chuàng)建?? 和?? 調(diào)度
線程
?? 創(chuàng)建速度快
?? 調(diào)度速度快
?? //線程的并發(fā)程度?? 更高
Time:獲取可執(zhí)行程序的運行時間
//2.安全性
線程
???? 優(yōu)點:因為共享了進程的數(shù)據(jù)空間,所以在共享數(shù)據(jù)方面,更方便
???? 缺點:安全性不好
?????????????? 帶來了資源競爭??? //專門的技術(shù)? 解決資源競爭? ----互斥?? 同步
進程
???? 優(yōu)點:進程空間相互獨立,好處就是安全性更高
???? 缺點:進程間共享數(shù)據(jù)不方便??? //進程間通信?? (管道,信號,共享內(nèi)存)
線程間的資源競爭:
??? 共享資源:臨界資源
??? 臨界區(qū):訪問共享資源(臨界資源)的代碼
機制:
??? 互斥鎖
??? 互斥?????? 排他性
??? 鎖
定義互斥鎖:
?? pthread_mutex_t?? mutex;
?? 互斥鎖類型?? 互斥鎖變量? 內(nèi)核對象
?加鎖:?? //加鎖? 加在? 要訪問臨界資源的地方
Pthread_mutex_lock()? //加鎖
解鎖:??????? //臨界資源訪問完就解鎖
Pthread_mutex_unlock()??? //解鎖
銷毀:
Pthread_mutex_destory()??? //銷毀一把鎖
因為使用鎖的時候會占用一部分硬件資源,如果不銷毀的話,硬件資源不會被釋放
Pthread_mutex_init()
功能:
??? 初始化?? 互斥鎖
? int pthread_mutex_init(
總結(jié):
//鎖是一種線程間?? 同步機制
//互斥鎖?? 保證線程對于共享資源的排他性訪問
??????????????? 保證每個線程訪問時的原子性操作(不可分割)
//操作
//初始化??? 一把鎖
//?? 動態(tài)初始化pthread_mutex_init
//?? 靜態(tài)初始化?? 用初始化的宏
//? ?加鎖
//? ?解鎖
//? ?銷毀
處理錯誤:
全局變量的默認初始值為0
線程間的順序問題;
//同步操作
強調(diào)的是線程的? 順序問題
信號量? //交通信號燈
???????????? //實現(xiàn)一種可以讓線程之間有序訪問的=臨界資源的方式
信號量的本質(zhì):
?????????? 一把鎖
??????????? //一把可以順序操作的鎖