執行緒複習筆記

2021-10-25 15:53:22 字數 1804 閱讀 8176

執行緒是競爭系統資源的最小單位。程序是執行緒的容器,乙個程序可以包含多條執行緒,同乙個程序的所有執行緒共用這個程序的記憶體空間。建立乙個新程序則會拷貝乙個新的記憶體空間。與程序相比,執行緒是一種更加節儉的的多工處理方式,但是程式的健壯性執行緒就沒有程序強。

1.建立乙個執行緒 pthread_create(pthread_t thread, const pthread_attr_tattr,void *(*start_routine) (void *), void *arg);

執行緒之間的需要訪問一些共享資源,為了保證對共享資源的有序訪問,防止競爭,需要對共享資源進行某種方式的保護,使得共享資源有序訪問。

步驟:1.先確定共享資源

2.確定臨界區

3.在使用保護機制去保護

執行緒中有哪些常見的共享資源嗎?

任何的全域性變數,任何的malloc的記憶體…都可以是共享資源,所有的執行緒都可以訪問.

.執行緒互斥鎖

執行緒互斥鎖是存在於程序位址空間內部的一種保護機制,「類似於訊號量」,只不過存在於程序內部的位址空間(預設)

在posix多執行緒中,使用型別pthread_mutex_t來描述乙個執行緒互斥鎖

操作方法非常類似於「無名訊號量」

步驟:1.定義乙個執行緒互斥鎖

2.初始化執行緒互斥鎖

3.p/v操作

4.銷毀執行緒互斥鎖

初始化乙個指定的執行緒互斥鎖:int pthread_mutex_init(pthread_mutex_t *restrict mutex,

const pthread_mutexattr_t *restrict attr);

mutex:要初始化的執行緒互斥鎖的位址

attr:執行緒互斥鎖的屬性,一般建議寫null,表示使用預設屬性

返回值:

成功返回0

失敗返回非0,errno被設定

例:pthread_mutex_t mutex;//定義乙個鎖

pthread_mutex_init(&mutex,null);

銷毀乙個指定的執行緒互斥鎖。

int pthread_mutex_destroy(pthread_mutex_t *mutex);

mutex:你要銷毀的執行緒互斥鎖

銷毀並不是刪除,只是把鎖的值變成未定義的!!

pthread_mutex_lock p操作

int pthread_mutex_lock(pthread_mutex_t *mutex);

pthread_mutex_unlock v操作

pthread_mutex_trylock:是嘗試獲取mutex指向的執行緒互斥鎖,「非阻塞版本」

生產者-消費者模型

生產者負責 產生 資料(任務)

消費者負責 消耗 資料(任務)

存在的問題:

1.儲存資料/任務的緩衝區是乙個共享資源

「互斥問題」

訊號量/執行緒互斥鎖

2.當緩衝區沒有資料的時候,消費者執行緒怎麼辦? 同步問題

a.不停的測試,看是否有任務來了 ----->輪詢

浪費cpu

b.使用類似於「訊號」的模式

當緩衝區沒有資料的時候,讓出cpu(執行緒/程序休眠),當有資料產生的時候

在喚醒(生產者)我,再通知(生產者)我

-------->執行緒的條件變數

在程式設計中,到底是要多執行緒還是多程序呢?

在需要進行資料共享比較多的時候,執行緒佔優勢

可靠性和耦合性性來說,多程序佔優勢

建立速度來說,程序建立/銷毀/切換速度慢,執行緒建立/銷毀/切換速度快,

從占用的資源來說,程序占用的記憶體多,cpu利用率比較低,執行緒占用的記憶體少,切換方便,

Python 多執行緒複習

python 多執行緒4種方式同步 1,lock。最簡單的用法,對於乙個全域性變數,要修改或者讀取前都記得lock.acquire下。然後用完就release下就好。缺點 無法通知某個執行緒去執行,需要不停的詢問查,是否可以獲得鎖了。2,訊號量 就是乙個計數器,他不i能 0,當 0時,則等待其他的執...

Java基礎複習執行緒

執行緒 實現多執行緒的兩種方法 繼承thread類,重新run方法 thread a new mythread 子執行緒 thread.start 實現runnable介面,實現run方法。myrunnable my new myrunable 在這個myrunnable類中已經重寫了run方法 t...

linux 複習大綱(執行緒)

執行緒 英語 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務 1 首先是定義程序 是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是乙個...