




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語(yǔ)言多線程開(kāi)發(fā)中死鎖與讀寫(xiě)鎖問(wèn)題詳解目錄死鎖讀寫(xiě)鎖
死鎖
有時(shí),一個(gè)線程需要同時(shí)訪問(wèn)兩個(gè)或更多不同的共享資源,而每個(gè)資源又都由不同的互斥量管理。當(dāng)超過(guò)一個(gè)線程加鎖同一組互斥量時(shí),就有可能發(fā)生死鎖;
兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪共享資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖。
死鎖的幾種場(chǎng)景:
忘記釋放鎖重復(fù)加鎖(重復(fù)加相同的鎖)多線程多鎖,搶占鎖資源
//多線程多鎖,搶占鎖資源
#includestdio.h
#includepthread.h
#includeunistd.h
//創(chuàng)建2個(gè)互斥量
pthread_mutex_tmutex1,mutex2;
void*workA(void*arg){
pthread_mutex_lock(mutex1);
sleep(1);
pthread_mutex_lock(mutex2);
printf("workA....\n");
pthread_mutex_unlock(mutex2);
pthread_mutex_unlock(mutex1);
returnNULL;
void*workB(void*arg){
pthread_mutex_lock(mutex2);
sleep(1);
pthread_mutex_lock(mutex1);
printf("workB....\n");
pthread_mutex_unlock(mutex1);
pthread_mutex_unlock(mutex2);
returnNULL;
intmain(){
//初始化互斥量
pthread_mutex_init(mutex1,NULL);
pthread_mutex_init(mutex2,NULL);
//創(chuàng)建2個(gè)子線程
pthread_ttid1,tid2;
pthread_create(tid1,NULL,workA,NULL);
pthread_create(tid2,NULL,workB,NULL);
//回收子線程資源
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
//釋放互斥量資源
pthread_mutex_destroy(mutex1);
pthread_mutex_destroy(mutex2);
return0;
}
執(zhí)行結(jié)果:
讀寫(xiě)鎖
/*
讀寫(xiě)鎖的類型pthread_rwlock_t
intpthread_rwlock_init(pthread_rwlock_t*restrictrwlock,constpthread_rwlockattr_t*restrictattr);
intpthread_rwlock_destroy(pthread_rwlock_t*rwlock);
intpthread_rwlock_rdlock(pthread_rwlock_t*rwlock);
intpthread_rwlock_tryrdlock(pthread_rwlock_t*rwlock);
intpthread_rwlock_wrlock(pthread_rwlock_t*rwlock);
intpthread_rwlock_trywrlock(pthread_rwlock_t*rwlock);
intpthread_rwlock_unlock(pthread_rwlock_t*rwlock);
案例:8個(gè)線程操作同一個(gè)全局變量。
3個(gè)線程不定時(shí)寫(xiě)這個(gè)全局變量,5個(gè)線程不定時(shí)的讀這個(gè)全局變量
#includestdio.h
#includepthread.h
#includeunistd.h
//創(chuàng)建一個(gè)共享數(shù)據(jù)
intnum=1;
//pthread_mutex_tmutex;
pthread_rwlock_trwlock;
void*writeNum(void*arg){
while(1){
pthread_rwlock_wrlock(rwlock);
num++;
printf("++write,tid:%ld,num:%d\n",pthread_self(),num);
pthread_rwlock_unlock(rwlock);
usleep(100);
returnNULL;
void*readNum(void*arg){
while(1){
pthread_rwlock_rdlock(rwlock);
printf("===read,tid:%ld,num:%d\n",pthread_self(),num);
pthread_rwlock_unlock(rwlock);
usleep(100);
returnNULL;
intmain(){
pthread_rwlock_init(rwlock,NULL);
//創(chuàng)建3個(gè)寫(xiě)線程,5個(gè)讀線程
pthread_twtids[3],rtids[5];
for(inti=0;ii++){
pthread_create(wtids[i],NULL,writeNum,NULL);
for(inti=0;ii++){
pthread_create(rtids[i],NULL,readNum,NULL);
//設(shè)置線程分離
for(inti=0;ii++){
pthread_detach(wtids[i]);
for(inti=0;ii
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村生態(tài)旅游開(kāi)發(fā)與經(jīng)營(yíng)管理協(xié)議
- 2025年電梯檢驗(yàn)員資格考試試卷:電梯檢驗(yàn)員電梯檢驗(yàn)實(shí)踐操作試題
- 2025年電工特種作業(yè)操作證考試試卷:電力系統(tǒng)故障預(yù)警與分析試題
- 2025年美甲師(初級(jí))考試試卷:美甲行業(yè)消費(fèi)市場(chǎng)分析
- 物流運(yùn)輸行業(yè)運(yùn)營(yíng)軌跡證明書(shū)(8篇)
- 2025年保險(xiǎn)從業(yè)資格考試保險(xiǎn)業(yè)務(wù)法律法規(guī)案例分析試題科目試卷
- 高中生古詩(shī)詞教學(xué):詩(shī)經(jīng)名篇導(dǎo)讀
- 2025年場(chǎng)(廠)內(nèi)專用機(jī)動(dòng)車輛作業(yè)特種作業(yè)操作證考試試卷(應(yīng)急處理)案例分析
- 人員勞務(wù)派遣與服務(wù)協(xié)議
- 學(xué)生在校實(shí)習(xí)成果與表現(xiàn)證明書(shū)(6篇)
- 出租車 專業(yè)部分考核試題 城市客運(yùn)企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員安全考核基礎(chǔ)題庫(kù)
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導(dǎo)則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門(mén)窗
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)《期末檢測(cè)試卷》
- 防腐除銹檢驗(yàn)記錄
- 公司金融課件(完整版)
- 三維激光掃描技術(shù)與應(yīng)用實(shí)例-PPT課件
- 鐵路貨物裝載常用計(jì)算公式
- 14S501-1 球墨鑄鐵單層井蓋及踏步施工
- (新知杯)2017-2011上海市初中數(shù)學(xué)競(jìng)賽試卷
- 職業(yè)緊張壓力量表OSI
評(píng)論
0/150
提交評(píng)論