什麼叫執行緒鎖:
鎖:顧名思義,就是鎖住。
比如:10個人去同乙個**亭,
第乙個人進去->關上門->打**->開門出來
第二個人進去->關上門->打**->開門出來
所以,這個告訴我們只有存在資源共享的時候,才會需要鎖。如果有10個**亭就不需要這麼麻煩了。
既然要鎖住,不是還只能乙個個打**嗎?那麼多執行緒的意義在**呢?對的,如果所有環節都需要鎖住,那麼多執行緒自然是沒有意義的了,但是,如果只有某個環節被鎖住,多執行緒還是有意義的。比如:進入**亭前,需要換硬幣,如果我們提供10個換硬幣的視窗,是不是也可以加快速度呢?還有,就是如果我們能提供5個**亭,是不是也可以提高速度呢?
所以,為了防止執行緒競爭資源(執行緒數大於資源數)造成系統錯亂,就需要執行緒鎖。這是完全可以影射現實的。從這種角度說,多執行緒其實也是一種思想與設計模式。
把多執行緒同時也可以理解成演算法,設計模式其實是給人看的,計算機其實不懂。對比下演算法,演算法就是給計算機看的,為了提高執行速度和縮減記憶體消耗(降低時間複雜度與空間複雜度)這種角度說,多執行緒其實是用空間換取時間的一種做法,是一種效率的提公升。
假設有一道演算法題是計算1+2+...+10000000所需要的時間。a想到等差數列去處理,b想到用多執行緒去加。雖然,在這道演算法題上多執行緒可能沒有優勢,但是,如果我們要去讀檔案,那麼多執行緒的優勢就很明顯了。比如,五個人同時想讀取同乙個檔案,我們可以給他們每個人分配乙個執行緒,也可以讓他們用乙個執行緒,效率顯而易見。
至於執行緒鎖,其實是對程式設計師道德的考驗。我們不能允許乙個人在讀檔案的時候,另乙個人在往這個檔案中寫(所以,需要在讀的時候,給檔案鎖住)。
樂觀鎖與悲觀鎖的對比
樂觀鎖 樂觀鎖表示當執行緒對資料進行操作時,認為不會有其他執行緒來修改資料,所以先不上鎖,對資料操作之後,檢查此時的資料是否和最開始執行緒進入時的資料一致,如果一致,那麼就可以認為沒有其他執行緒對資料進行修改,現在可以對資料進行更新 如果不一致,那麼就再讀資料,再操作再檢查資料,直到可以更新資料為止...
執行緒鎖與避免執行緒鎖 執行緒鎖檢測
程序是資源共享的,執行緒是資源私有的。死鎖的四個必要條件 在計算機專業的本科教材中,通常都會介紹死鎖的四個必要條件。這四個條件缺一不可,或者說只要破壞了其中任何乙個條件,死鎖就不可能發生。我們來複習一下,這四個條件是 互斥 mutual exclusion 存在這樣一種資源,它在某個時刻只能被分配給...
執行緒與訊號,執行緒與鎖
include include includepthread mutex t number mutex pthread mutex initializer int globvar 0 void write p void arg void read p void arg int main sleep ...