thread相關 互斥鎖

2021-08-09 17:16:23 字數 1862 閱讀 1582

互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。可以保證以下三點:

原子性:把乙個互斥量鎖定為乙個原子操作,這意味著作業系統(或pthread函式庫)保證了如果乙個執行緒

鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥量。

唯一性:如果乙個執行緒鎖定了乙個互斥量,在它解除鎖定之前,沒有其他執行緒可以鎖定這個互斥量。

非繁忙等待:如果乙個執行緒已經鎖定了乙個互斥量,第二個執行緒又試圖去鎖定這個互斥量,則第二個執行緒將

被掛起(不占用任何cpu資源),直到第乙個執行緒解除對這個互斥量的鎖定為止,第二個執行緒則被喚

醒並繼續執行,同時鎖定這個互斥量。

從以上三點,我們看出可以用互斥量來保證對變數(關鍵的**段)的排他性訪問。

from

從網上找的**,但是自己還不是很能理解。所以根據這個**進行研究分析。。。

下面的** from

#include 

#include

#include

#include

#pragma comment(lib, "pthreadvc2.lib") //必須加上這句

using

namespace

std;

#define num_threads 5

int sum = 0;//定義個全域性變數,讓所有執行緒進行訪問,這樣就會出現同時寫的情況,勢必會需要鎖機制;

pthread_mutex_t sum_mutex;

void* say_hello(void* args)

int main()

} pthread_attr_destroy(&attr);//刪除引數變數

void *status;

for (int i = 0; i < num_threads; ++i)

} cout

<< "finally sum is "

<< sum << endl;

pthread_mutex_destroy(&sum_mutex);//登出鎖,可以看出使用pthread內建變數神馬的都對應了銷毀函式,估計是記憶體洩露相關的吧;

system("pause");

return

0;}

執行結果如下:

hello in

thread hello in

thread

1hello in

thread

3hello in

thread

2hello in thre

ad 40

before sum is 0

inthread

4after sum is 4

inthread

4before sum is 4

inthread

2after sum is 6

inthread

2before sum is 6

inthread

1after sum is 7

inthread

1before sum is 7

inthread

3after sum is 10

inthread

3before sum is 10

inthread

0after sum is 10

inthread

0finally sum is 10

請按任意鍵繼續...

//多執行緒的順序是混亂的,混亂就是正常;只要sum訪問及修改是正常的,就達到多執行緒的目的了,執行順序不能作為參照;

thread相關 讀寫鎖

讀寫鎖初始化 int pthread rwlock init pthread rwlock t rwlock,const pthread rwlockattr t attr 該函式第乙個引數為讀寫鎖指標,第二個引數為讀寫鎖屬性指標。函式按讀寫鎖屬性對讀寫鎖進行初始化。加讀鎖 int pthread ...

thread互斥測試

互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。可以保證以下三點 原子性 把乙個互斥量鎖定為乙個原子操作,這意味著作業系統 或pthread函式庫 保證了如果乙個執行緒 鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥量。唯一性 如果乙個執行緒鎖定了乙個互...

7 2 互斥量(互斥鎖)的相關API

1 對於多執行緒的程式,訪問衝突與資料紊亂的問題是很常見的,解決的一種辦法是引入互斥鎖 mutex 獲得鎖的執行緒可以完成 讀 修改 寫 操作,然後釋放鎖給其他執行緒,沒有鎖的執行緒只能等待而不能訪問共享資料 互斥鎖的主要函式 1 pthread mutex init函式 初始化乙個互斥鎖 互斥量 ...