【1】線程的狀態:默認爲非綁定、非分離、1MB大小的堆棧,與父進程具有同樣的優先級
【2】等待線程——pthread_join
-
功能:阻塞等待,知道子線程結束運行,然後得到子線程退出碼,回收子線程的資源。
-
如果不使用pthread_join回收線程,可能會導致類似殭屍進程一樣的問題,導致內存泄漏。
【3】線程分離——pthread_detach
-
默認情況下,線程是非分離態(結合態)
-
如果不關心線程的退出時的狀態,可以將之設置爲分離態這種情況下,線程終止時能夠自動清除資源
-
使用detach會讓線程在後臺運行
【4】多線程同步:
-
互斥鎖
-
讀寫鎖(
讀寫鎖非常適合對數據讀的次數比寫的次數多。
三種狀態:
1. 當資源加上了寫鎖之後,所有試圖對資源加鎖的線程都被阻塞;
2. 讀模式加鎖時,如果線程是讀加鎖則成功,如果線程是寫加鎖會阻塞。
3. 讀鎖、寫鎖並行阻塞時,寫鎖優先級高,即解鎖後優先執行寫鎖操作
)
-
條件變量(互斥量是線程程序必需的工具,但並非是萬能的。例如,如果線程正在等待共享數據內某個條件出現,那會發生什麼呢?它可能重複對互斥對象鎖定和解鎖,每次都會檢查C++共享數據結構,以查找某個值。但這是在浪費時間和資源,而且這種繁忙查詢的效率非常低。)
-
信號量
-
屏障(
屏障允許任意線程等待,直到所有線程完成屏障前的處理工作,然後所有線程再開始屏障之後的工作;
比如pthread_join就是一種屏障,需要一個線程等待另一個線程終止
)
【5】線程並行方式
-
任務並行(把一個任務拆分成多個子任務,分工協作)
-
數據並行(比如大數處理的時候,可以使用數據並行,需要用到屏障進行同步)
【6】多線程模型
-
master - worker
-
fork - join(大數據處理比如)
-
生產者 - 消費者(lis比如)
-
future模型和actor模型不瞭解
https://www.cnblogs.com/PerkinsZhu/p/7570775.html
另一種解釋:內核線程和用戶線程之間的關係:
-
一對多(不支持多核CPU)
-
一對多
-
多對多