執行緒程式設計相關知識

2021-06-27 23:19:12 字數 1666 閱讀 5271

一、讀寫鎖

讀寫鎖 (rwlock)功能特點簡介

讀寫鎖實際是一種特殊的

自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於

自旋鎖而言,能提高

併發性,因為在

多處理器系統中,它允許同時有多個讀者來訪問共享資源,最大可能的讀者數為實際的邏輯cpu數。寫者是排他性的,乙個讀寫鎖同時只能有乙個寫者或多個讀者(與cpu數相關),但不能同時既有讀者又有寫者。

在讀寫鎖保持期間也是搶占失效的。

如果讀寫鎖當前沒有讀者,也沒有寫者,那麼寫者可以立刻獲得讀寫鎖,否則它必須自旋在那裡,直到沒有任何寫者或讀者。如果讀寫鎖沒有寫者,那麼讀者可以立即獲得該讀寫鎖,否則讀者必須自旋在那裡,直到寫者釋放該讀寫鎖。

1. 特性:

一次只有乙個

執行緒可以占有寫模式的讀寫鎖, 但是可以有多個執行緒同時占有讀模式的讀寫鎖. 正是因為這個特性,

當讀寫鎖是寫加鎖狀態時, 在這個鎖被解鎖之前, 所有試圖對這個鎖加鎖的執行緒都會被阻塞.

當讀寫鎖在讀加鎖狀態時, 所有試圖以讀模式對它進行加鎖的

執行緒都可以得到訪問權, 但是如果執行緒希望以寫模式對此鎖進行加鎖, 它必須直到知道所有的執行緒釋放鎖.

通常, 當讀寫鎖處於讀模式鎖住狀態時, 如果有另外執行緒試圖以寫模式加鎖, 讀寫鎖通常會阻塞隨後的讀模式鎖請求, 這樣可以避免讀模式鎖長期占用, 而等待的寫模式鎖請求長期阻塞.

2. 適用性:

讀寫鎖適合於對

資料結構的讀次數比寫次數多得多的情況. 因為, 讀模式鎖定時可以共享, 以寫模式鎖住時意味著獨佔, 所以讀寫鎖又叫共享-獨佔鎖.

3. 初始化和銷毀:

#include

int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

成功則返回0, 出錯則返回錯誤編號.

同 互斥量以上, 在釋放讀寫鎖占用的記憶體之前, 需要先通過pthread_rwlock_destroy對讀寫鎖進行清理工作, 釋放由init分配的資源.

4. 讀和寫:

#include

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

成功則返回0, 出錯則返回錯誤編號.

這3個函式分別實現獲取讀鎖, 獲取寫鎖和釋放鎖的操作. 獲取鎖的兩個函式是阻塞操作, 同樣, 非阻塞的函式為:

#include

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

成功則返回0, 出錯則返回錯誤編號.

非阻塞的獲取鎖操作, 如果可以獲取則返回0, 否則返回錯誤的ebusy.

多執行緒 相關知識

多執行緒 目標程序 執行緒程序 對應的就是計算機中執行的應用程式 process p new process p.startinfo.filename notepad.exe p.start 通過例項物件來開啟記事本 process ps process.getprocesses foreach p...

執行緒的相關知識3

標頭檔案 include sem init 函式的作用 初始化訊號量 原型 int sem init sem t sem,int pshared,unsigned int value 引數 sem 訊號量指標 pshared 0 value 訊號量的初始化 返回值 成功 0,出錯 1 訊號量的pv操...

程序 執行緒 執行緒池的相關知識

什麼是程序,什麼是執行緒 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 乙個應用程式的執行就可以被看做是乙個程序,而執行緒是執行中的實際的任務執行者。可以說,程序中包含了多個可以同時執行的執行緒。我們在建立執行緒池的時候一般使用它的子類threadpoolexecutor.public t...