多執行緒 互斥鎖

2021-07-16 05:25:33 字數 1752 閱讀 9246

#include#include#include//handle mutex = null;

srwlock g_lock;

//改變乙個變數的時候需要鎖定

int num = 6400000;

//在讀期間,值一直在變化,沒有鎖定。

dword winapi reada(void *p)

i++; }}

//使用acquiresrwlockshared()鎖定讀取的資源

dword winapi readb(void *p)

i++;

} releasesrwlockshared(&g_lock);

}//寫

dword winapi sub(void *p)

releasesrwlockexclusive(&g_lock);//函式功能:寫入者執行緒寫資源完畢,釋放對資源的占用

//sleep(1000);

//releasemutex(mutex);

return 0;

}//讀寫

void main()

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

createthread(null, 0, readb, null, 0, null); //讀取時,值被鎖定

waitformultipleobjects(64, hd, true, infinite);

printf("main.num=%d\n", num);

system("pause");

}//只是寫

void main1()

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

waitformultipleobjects(64, hd, true, infinite);

printf("%d\n", num);

system("pause");

}

//第乙個 initializesrwlock

////函式功能:初始化讀寫鎖

////函式原型:void initializesrwlock(psrwlock srwlock);

////函式說明:初始化(沒有刪除或銷毀srwlock的函式,系統會自動清理)

////

////第二個 acquiresrwlockexclusive

////函式功能:寫入者執行緒申請寫資源。

////函式原型:void acquiresrwlockexclusive(psrwlock srwlock);

////

////第三個 releasesrwlockexclusive

////函式功能:寫入者執行緒寫資源完畢,釋放對資源的占用。

////函式原型:void releasesrwlockexclusive(psrwlock srwlock);

////

////第四個 acquiresrwlockshared

////函式功能:讀取者執行緒申請讀資源。

////函式原型:void acquiresrwlockshared(psrwlock srwlock);

////

////第五個 releasesrwlockshared

////函式功能:讀取者執行緒結束讀取資源,釋放對資源的占用。

////函式原型:void releasesrwlockshared(psrwlock srwlock);

////

////注意乙個執行緒僅能鎖定資源一次,不能多次鎖定資源。

多執行緒 互斥鎖

package com.yys.thread created by yys on 2017 9 25.兩個執行緒執行 t1如果能拿到02物件則t1執行緒執行完畢 t2如果能拿到o1物件則t2執行緒執行完畢 現在兩個執行緒分別鎖定了對方需要的物件 造成執行緒死鎖 public class testde...

多執行緒 互斥鎖

使用reentrantlock類的lock和unlock方法進行同步通訊 使用reentrantlock類的newcondition方法可以獲取condition物件,需要等待的時候使用conditionde await方法,喚醒的時候用signal方法,不同的執行緒使用不同的condition,這...

多執行緒程式設計 互斥鎖

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