網(wǎng)頁游戲網(wǎng)站建設/汕頭seo優(yōu)化項目
? 線程結束方式:
1.pthread_exit?? //pthread_join
2.從線程執(zhí)行函數(shù)中return? //此時效果等價于pthread_exit
3.pthread_cancel? //線程可以被取消
4.任何一個線程調用了exit 或者 主線程 (main函數(shù)) return都會造成 進程結束?
?線程資源回收 ---pthread_join
?int pthread_cancel(pthread_t thread);
功能:發(fā)送取消的請求
參數(shù):thread 表示要發(fā)送的線程的tid號
返回值:成功 0失敗 錯誤碼
1.pthread_join??? //需要自己回收? ---線程的屬性 (可結合性)? --- 一般是子線程 在較短時間內運行完
2.pthread_detach? //可分離屬性??? ---子線程運行很久才結束 ---? 設置分離屬性
函數(shù):pthread_detach();
int pthread_detach(pthread_t thread);
功能:分離線程
參數(shù):thread 要分離的線程的tid
返回值:成功 0;失敗 錯誤碼
總結:
1.創(chuàng)建 -- pthread_create
2.執(zhí)行 -- 線程執(zhí)行函數(shù)
3.退出 -- pthread_exit
????????? return? //線程執(zhí)行函數(shù)中
????????????? ? pthread_cancel
????????????? ? exit() //return 從main??
4.資源回收
?????? 可結合性 --- pthread_join這種用于線程任務較短,主線程需要關心子線程狀態(tài)
?????? ?? 可分離性 --- pthread_detach子程序執(zhí)行任務較長,主線程也不需要關心子線程狀態(tài)
對比 線程 和 進程
1.線程 vs 進程
線程 CPU執(zhí)行的最小單位
進程 資源分配和任務調度基本單位
2. 各自特點 (優(yōu)缺點)
1.創(chuàng)建 和 調度
?線程創(chuàng)建速度快 調度速度快 發(fā)程度 更高
2. 安全性
線程:優(yōu)點:
共享了進程的數(shù)據(jù)空間 ???共享數(shù)據(jù)方面 方便
?????? 缺點:
安全性不好 帶來資源競爭? 專門的技術 解決資源競爭? --- 互斥 同步
進程 進程空間相互獨立 優(yōu)點:
安全性好
缺點:
????????????? ??? 進程間共享數(shù)據(jù)不方便? 進程間通信?? (管道,信號,共享內存)??
?3. 編程 線程的復雜程度更高一些;
線程間的資源競爭:
?? 共享資源:??? 臨界資源
?? 臨界區(qū)? :??? 訪問共享資源(臨界資源)那段代碼
機制:互斥鎖??
?????? 互斥???? 排他性?? --- 要么不訪問 要訪問就是一次完整操作? (原子操作)
?????? 鎖:軟件層面上的鎖
鎖的操作機制 框架:
?????? ?定義互斥鎖 ==》初始化鎖 ==》加鎖 ==》解鎖 ==》銷毀
1.定義互斥鎖:
??? pthread_mutex_t?? mutex;
?????? 互斥鎖類型??????? 互斥鎖變量 內核對象
2.初始化鎖
??? pthread_mutex_init(); //初始化一把鎖???
3.加鎖?? 加鎖加要訪問臨界資源的地方
?????? pthread_mutex_lock(); 上鎖
4.解鎖
?????? ?? pthread_mutex_unlock(); 解鎖? 臨界資源訪問之后就解開
5.銷毀
?????? pthread_mutex_destroy();銷毀一把鎖
pthread_mutex_init()???
?功能:初始化 互斥鎖
int pthread_mutex_init(
?????? ?????? pthread_mutex_t *restrict mutex,
?????????? const pthread_mutexattr_t *restrict attr);
?????? 參數(shù):
?????? mutex? 就是要初始化的 互斥鎖變量
?????? attr??? 屬性? NULL 默認屬性? --- 普通鎖 ?
?????? ?? int pthread_mutex_lock(pthread_mutex_t *mutex);
?????? int pthread_mutex_trylock(pthread_mutex_t *mutex);
?????? int pthread_mutex_unlock(pthread_mutex_t *mutex);
? 參數(shù): mutex??? //要操作的那把鎖
int pthread_mutex_destroy(pthread_mutex_t *mutex); 用完之后鎖要銷毀,釋放空間;
總結:鎖是一種線程間的同步機制;
互斥鎖:保證線程對共享資源的排他性訪問;
保證每個線程訪問時的原子操作;
對于互斥鎖的靜態(tài)初始化