1、在
linux2.2
核心中,並不存在真正意義上的執行緒。當時
linux
中常用的執行緒
pthread
實際上是通過程序來模擬的,也就是說
linux
中的執行緒也是通過
fork()
建立的「輕」程序,並且執行緒的個數也很有限,最多只能有
4096
個程序/
執行緒同時執行。
2、linux2.4
核心消除了這個執行緒個數的限制,並且允許在系統執行中動態地調整程序數上限。當時採用的是
linuxthread
執行緒庫,它對應的執行緒模型是「一對一」執行緒模型,
也就是乙個使用者級執行緒對應乙個核心執行緒,而執行緒之間的管理在核心外的函式庫中實現
。 3、在
linux
核心2.6
之前的版本中,程序是最主要的處理排程單元,並沒支援核心執行緒機制。
linux 2.6
核心支援
clone()
系統呼叫,從而實現共享位址空間的程序機制。因而
linux
系統在1996
年第一次獲得執行緒的支援,當時所使用的函式庫被稱為
linuxthread
。該函式庫就使用
clone()
系統呼叫實現核心級的執行緒機制,在此前的
linux
版本中在使用者層實現
posix
執行緒庫。
由red hat
主導的本地化
posix
執行緒庫(native posix thread library
,簡稱為
ntpl)
,現在已經成為
gnu c
函式庫的一部分,同時也成為
linux
執行緒的標準。
4、執行緒屬性
1)繫結屬性
linux中採用「一對一」的執行緒機制,也就是乙個使用者執行緒對應乙個核心執行緒
。繫結屬性就是指乙個使用者執行緒固定地分配給乙個核心執行緒,因為
cpu時間片的排程是面向核心執行緒
(也就是輕量級程序)的,因此具有繫結屬性的執行緒可以保證在需要的時候總有乙個核心執行緒與之對應。而與之對應的非繫結屬性就是指使用者執行緒和核心執行緒的關係不是始終固定的,而是由系統來控制分配的。
2)分離屬性
分離屬性是用來決定乙個執行緒以什麼樣的方式來終止自己。在非分離情況下,當乙個執行緒結束時,它所占用的系統資源並沒有被釋放,也就是沒有真正的終止。只有當
pthread_join()
函式返回時,建立的執行緒才能釋放自己占用的系統資源。而在分離屬性情況下,乙個執行緒結束時立即釋放它所占有的系統資源。這裡要注意的一點是,如果設定乙個執行緒的分離屬性,而這個執行緒執行又非常快,那麼它很可能在
pthread_create()
函式返回之前就終止了,它終止以後還就可能將該執行緒號和系統資源移交給其他的執行緒使用,這可能會引起錯誤。
5、互斥量本質是一把鎖,提供對共享資源的保護訪問。
6、二進位制訊號量與互斥鎖的區別
1)mutex
:誰獲得,誰釋放,而訊號量可以由其他執行緒釋放。
2)mutex
初始值為
1,而訊號量可0可
1。7、執行緒與輕程序
8、linux
中使用程序實現執行緒,所以新建立的執行緒和源執行緒程序號可能不同。
多執行緒 10 執行緒副本
threadlocal 執行緒副本的使用 執行緒副本類主要解決的就是,要每個單獨的執行緒,都繫結自己執行緒內部共享的值,可以想象每個執行緒都有自己的 threadlocal 筆記本,這個筆記本上記載著所有該執行緒自身的共享變數 class mythreadlocal public string ge...
10 執行緒池 執行緒排程
執行緒池 第四種 獲取執行緒的方法 執行緒池 乙個executorservice,它使用執行緒池的可能的某個執行緒之一執行每個提交的任務,通常使用 executors 工廠方法配置 executorservice service executors.newfixedthreadpool 5 執行緒池...
1 0執行緒 執行緒間的共享
多個執行緒 可以共享同乙個程序中的資源 多執行緒對程序中的 公共變數 進行同時訪問 如果不加鎖的時候,有可能訪問不到。1 synchronize 本質 對具體物件的加鎖 類鎖 對類在虛擬機器中的class物件的加鎖 物件鎖 保證物件的原子性 同步塊 加鎖 方法 加鎖 類說明 synchronized...