執行緒篇 執行緒的實現和執行緒安全

2021-09-25 22:13:12 字數 1355 閱讀 3212

執行緒的實現?

作業系統關於

執行緒實現:使用者級

執行緒核心級

執行緒組合模型

使用者級:執行緒建立、管理、銷毀,都由執行緒庫**完成開銷比較小

作業系統對執行緒的存在一無所知,作業系統只能看到程序,而不能看到執行緒。這種模式最致命的缺點也是由於作業系統不知道執行緒的存在,因此當乙個程序中的某乙個執行緒進行系統呼叫時,比如缺頁中斷而導致執行緒阻塞,此時作業系統會阻塞整個程序,即使這個程序中其它執行緒還在工作。

核心級:執行緒建立,管理都由核心完成,開銷大,系統呼叫

作業系統知道執行緒的存在。此時執行緒表存在作業系統核心中。因為執行緒在核心態實現,每次執行緒切換都需要陷入到核心,由作業系統來進行排程。其次,占用核心稀缺的記憶體資源。作業系統需要維護執行緒表,作業系統所佔的記憶體空間一旦裝載結束後就已經固定,無法動態改變。由於執行緒的數量大大高於程序的數量,那麼隨著執行緒數量的增加,作業系統核心空間將迅速耗盡。

混合模式:

使用者態的執行系統負責程序內部執行緒在非阻塞時的切換;核心態的作業系統負責阻塞執行緒的切換,即我們同時實現核心態和使用者態執行緒管理。

使用者級多處理器

linux執行緒的實現:《linux核心與實現》第三章

linux 程序的方式實現執行緒,共享很多資源

檢視執行緒的id ps -elf 「l」顯示執行緒的資訊  top -h

什麼是執行緒安全

執行緒安全就是說多執行緒訪問同一**,不會產生不確定的結果。編寫執行緒安全的**是低依靠執行緒同步。

解決方法:1.同步執行緒2.使用執行緒安全的函式

執行緒安全的函式|可重入函式(有同步)

非執行緒安全(沒有同步):一般是由於在函式中使用了靜態變數、全域性變數而引起的

strtok(不安全) strtok_r(安全)

多執行緒,fork()複製的子程序只有一條執行路徑,就是fork所在的那條執行路徑

共享哪些資源?

程序**段、程序的公有資料(利用這些共享的資料,執行緒很容易的實現相互之間的通訊)、程序開啟的

檔案描述符

、訊號的處理器、程序的當前目錄和程序使用者id與程序組id。

iOS開發多執行緒篇 執行緒安全

一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安全4 5 6 7 89 10 im...

iOS開發多執行緒篇 執行緒安全

ios開發多執行緒篇 執行緒安全 一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安...

iOS開發多執行緒篇 執行緒安全

一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安全4 5 6 7 89 10 im...