#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函式庫 保證了如果乙個執行緒鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥...