一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

關(guān)注:如何使用lock_guard鎖定mutex?java中mutex的使用方法

來源:CSDN 時間:2023-01-16 07:55:05

mutex用來協(xié)助采取獨占方式控制對資源的并發(fā)訪問,這里的資源可能是一個對象,或多個對象的組合,為了獲得獨占式的資源訪問能力,相應(yīng)的線程必須鎖定mutex,這樣可以防止其它線程也鎖定該mutex。

下面兩條線程如果沒有使用mutex來同步,則輸出結(jié)果會是112233。

mutex g_mutex;void print123() {g_mutex.lock();for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}g_mutex.unlock();} int main(){thread(print123).detach();thread(print123).detach();//123123system("pause");}

你應(yīng)該確保mutex對象調(diào)用lock后,即使發(fā)生異常也會調(diào)用unlock,否則有可能造成資源被永遠(yuǎn)鎖住或者死鎖。


(資料圖片)

為此我們可以使用lock_guard來進(jìn)行l(wèi)ock和unlock,lock_guard在構(gòu)造時會lock,析構(gòu)時會unlock,使用大括號對可以加快lock_guard的析構(gòu),需要注意的是lock_guard一定要分配變量名,否則不會有效果。

void print123(){lock_guard lockGuard(g_mutex);for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}}

同一線程多次鎖定mutex會導(dǎo)致程序終止,而recursive_mutex則不會,這個mutex允許同一線程多次鎖定。

recursive_mutex g_mutex;void print123(){g_mutex.lock();g_mutex.lock();for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}g_mutex.unlock();g_mutex.unlock();}

有時候線程想要鎖定mutex,但又不想其它線程已鎖定mutex時阻塞,這種情況下可以使用try_lock,它試圖鎖定mutex,成功就返回true,失敗返回false。

為了等待特定長度的時間,你可以使用timed_mutex或recursive_timed_mutex的try_lock_for或try_lock_until方法。

由于try_lock在返回true時會鎖定mutex,為了防止lock_guard重復(fù)鎖定,需要傳遞參數(shù)adopt_lock。

void print123() {if (g_mutex.try_lock()) {lock_guard  lockGuard(g_mutex,adopt_lock);for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}} else {cout << "mutex locked" <thread(print123).detach();thread(print123).detach();system("pause");}

通常一個線程一次只鎖定一個mutex,然而有時候必須鎖定多個mutex,如果一個個鎖定,有可能出現(xiàn)鎖定了第一個mutex,而無法鎖定第二個mutex的情況。這種情況下可以使用全局函數(shù)lock鎖定多個mutex。

mutex g_mutex1;mutex g_mutex2;void print123() {lock(g_mutex1, g_mutex2);lock_guard lockGuard1(g_mutex1, adopt_lock);lock_guard lockGuard2(g_mutex2, adopt_lock);for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}} int main(){thread(print123).detach();thread(print123).detach();system("pause");}

使用全局函數(shù)try_lock嘗試鎖定多個mutex,如果鎖定所有mutex則返回-1,否則返回第一個失敗的mutex的索引(從0開始),并且所有被成功lock的mutex會又被unlock。

mutex g_mutex1;mutex g_mutex2;void print123() {lock(g_mutex1, g_mutex2);lock_guard lockGuard1(g_mutex1, adopt_lock);lock_guard lockGuard2(g_mutex2, adopt_lock);for (int i = 0; i < 3; i++) {this_thread::sleep_for(chrono::milliseconds(100));cout << i + 1;}}void printLockState(){auto result = try_lock(g_mutex1, g_mutex2);cout << result << endl;if (result == -1) {lock_guard lockGuard1(g_mutex1, adopt_lock);lock_guard lockGuard2(g_mutex2, adopt_lock);}} int main(){thread(print123).detach();thread(printLockState).detach();system("pause");}

除了lock_guard,C++還提供一個類似的類unique_lock,它比lock_guard更靈活,unique_lock允許你明確指定何時鎖定或解鎖mutex,而lock_guard總是鎖定mutex,如果unique_lock析構(gòu)時mutex仍被鎖住,析構(gòu)函數(shù)會自動調(diào)用unlock,如果沒有則不做任何事。

mutex g_mutex1;timed_mutex g_mutex2; int main(){//嘗試鎖定mutex,但不會阻塞unique_lock uniqueLock1(g_mutex1, try_to_lock);//嘗試鎖定mutex,不超過10秒unique_lock uniqueLock2(g_mutex2, chrono::seconds(10));//主動調(diào)用lock,try_lock,try_lock_for等才會鎖定unique_lock uniqueLock3(g_mutex1, defer_lock);//通過已鎖定的mutex初始化unique_lock uniqueLock4(g_mutex1, adopt_lock);//判斷有沒有鎖定mutexcout << (uniqueLock1 ? "locked" : "unlocked")<< endl;cout << uniqueLock1.owns_lock() << endl;//解鎖mutexuniqueLock1.unlock();//鎖定mutexuniqueLock3.lock();system("pause");}
責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
亚洲精品视频在线看| 美日韩精品免费| 欧美一二三区精品| 欧美激情视频一区二区三区在线播放 | 国产精品一区二区三区免费观看| 日韩视频一区二区三区在线播放免费观看 | 亚洲精品专区| 欧美日韩精品免费观看视频| 99国产精品久久久| 国产精品亚洲一区二区三区在线| 欧美亚洲系列| 亚洲成色777777在线观看影院| 免费成人在线观看视频| 亚洲美女少妇无套啪啪呻吟| 欧美精品999| 欧美一区2区视频在线观看| 精品盗摄一区二区三区| 欧美福利电影在线观看| 亚洲综合精品一区二区| 国产欧美一区二区三区久久人妖| 欧美在线不卡视频| 亚洲日本va午夜在线影院| 欧美视频在线观看 亚洲欧| 久久成人18免费网站| 伊人久久久大香线蕉综合直播 | 亚洲少妇在线| 合欧美一区二区三区| 欧美日韩国产二区| 久久精品国产亚洲一区二区三区 | 亚洲免费福利视频| 国产欧美一区二区三区视频| 欧美日韩在线视频一区| 麻豆精品视频在线| 亚洲欧美制服另类日韩| 亚洲毛片视频| 亚洲国产精品一区制服丝袜| 国产欧美亚洲日本| 欧美日韩国产大片| 久久精视频免费在线久久完整在线看| 一本在线高清不卡dvd | 欧美在线一级视频| 99国产精品久久| 亚洲久久一区| 亚洲激情视频| 国产午夜精品一区二区三区视频 | 国产精品视频精品| 欧美精品麻豆| 欧美大片免费观看| 裸体歌舞表演一区二区| 午夜在线成人av| 亚洲一区二区久久| 宅男噜噜噜66国产日韩在线观看| 亚洲国产精品传媒在线观看| 国产婷婷一区二区| 国产精品自拍在线| 国产无一区二区| 国产精品户外野外| 国产精品成人观看视频国产奇米| 欧美啪啪一区| 欧美精品久久一区二区| 美女久久一区| 美女啪啪无遮挡免费久久网站| 久久精品国产69国产精品亚洲| 欧美亚洲一区二区三区| 欧美一区影院| 久久国产精品久久国产精品| 亚洲一区精彩视频| 亚洲视频中文| 欧美一区二区成人| 午夜精品成人在线视频| 久久久99久久精品女同性| 久久av在线| 久久www免费人成看片高清| 亚洲欧美日本国产有色| 欧美在线免费一级片| 久热精品在线| 美女网站在线免费欧美精品| 欧美日韩国产精品专区| 国产日韩精品一区观看| 亚洲大胆人体在线| 一本色道精品久久一区二区三区 | 亚洲一区二区三区四区中文| 亚洲欧美日韩精品在线| 欧美一区二区国产| 久久久久国产精品一区| 免播放器亚洲一区| 国产精品激情| 黄色精品网站| 一本色道久久综合| 欧美一区二区黄| 久久免费黄色| 欧美激情四色 | 欧美伊久线香蕉线新在线| 欧美一区二区三区日韩| 美女精品在线| 欧美麻豆久久久久久中文| 国产精品久久久久久久久| 在线播放日韩| 亚洲一区二区三区视频| 久久精品视频免费播放| 欧美高清视频在线| 国产精品观看| 亚洲成色www8888| 香蕉久久国产| 欧美国产专区| 国产欧美日韩三级| 在线中文字幕一区| 久久免费视频在线观看| 欧美午夜影院| 精品动漫3d一区二区三区免费| 亚洲一区二区黄色| 欧美波霸影院| 国产一区二区三区网站| 一区二区免费在线观看| 美女诱惑一区| 国产欧美一区二区色老头| 亚洲精品综合精品自拍| 蜜臀av一级做a爰片久久| 国产精品xnxxcom| 亚洲精品色图| 欧美国产日韩在线观看| 亚洲第一毛片| 久久午夜电影网| 国产综合久久久久久| 亚洲在线电影| 欧美体内谢she精2性欧美| 亚洲精品影视在线观看| 欧美成人精品1314www| 亚洲福利小视频| 嫩模写真一区二区三区三州| 在线高清一区| 欧美大片免费久久精品三p| 亚洲国产精品专区久久| 欧美成黄导航| 99国产精品久久久久久久久久 | 日韩视频在线一区二区三区| 欧美本精品男人aⅴ天堂| 好吊日精品视频| 久久夜色精品国产欧美乱极品| 黄色成人在线观看| 久久综合五月天婷婷伊人| 亚洲二区在线视频| 欧美精品自拍偷拍动漫精品| 日韩亚洲欧美成人| 欧美亚日韩国产aⅴ精品中极品| 在线一区日本视频| 国产精品免费看| 欧美一区成人| 亚洲黄色成人网| 欧美日韩美女在线观看| 亚洲视频在线二区| 国产精品一卡二| 久久久噜噜噜久噜久久 | 韩国一区二区三区美女美女秀| 久久精品国产69国产精品亚洲| 国内自拍视频一区二区三区| 美女啪啪无遮挡免费久久网站| 亚洲黄色影片| 国产精品观看| 久久中文字幕一区| 亚洲免费观看高清在线观看 | 久久精品国产清高在天天线| 激情综合色综合久久| 免费欧美在线视频| 亚洲一区二区成人| 极品日韩久久| 国产精品久久久久久久久免费樱桃| 欧美中文在线视频| 亚洲精品黄色| 国产精品一区一区三区| 免费黄网站欧美| 午夜精品在线视频| 亚洲日本中文字幕免费在线不卡| 欧美特黄一级| 免费高清在线一区| 午夜精品久久一牛影视| 亚洲黄色精品| 国产一区二区三区电影在线观看| 欧美激情女人20p| 欧美有码视频| 中文一区在线| 亚洲人体影院| 极品尤物av久久免费看| 欧美性视频网站| 欧美精品v国产精品v日韩精品| 久久se精品一区二区| 99精品视频免费在线观看| 国内精品免费在线观看| 国产精品家教| 欧美日韩大片一区二区三区| 久久精品中文字幕免费mv| 亚洲在线视频观看| 99视频有精品| 91久久久在线| 在线看欧美视频| 狠色狠色综合久久| 国产日韩欧美三区| 国产精品久久久久久亚洲调教 | 欧美日韩喷水| 欧美制服丝袜第一页|