91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

boost mutex以及scoped_lock應用

發布時間:2020-05-29 20:23:53 來源:網絡 閱讀:13669 作者:fengyuzaitu 欄目:編程語言

boost::mutex提供了跨平臺的鎖操作,不允許多個線程同時訪問共享資源,從而確保共享資源不被臟寫。在本文中僅僅是介紹簡單的兩種鎖,最高效的鎖boost::mutex和區域鎖boost::mutex::scoped_lock


boost::mutex例子

#include <boost/thread/mutex.hpp>

boost::mutex m_mutexAccessServiceManager;

void CSettingCenter::ClearPlatformServiceInfoCache()

{

m_mutexAccessServiceManager.lock();

m_mapAccessServiceManager.clear();

m_mutexAccessServiceManager.unlock();

}


區域鎖boost::mutex::scoped_lock顧名思義就是在作用域內有效,當離開作用域自動釋放鎖,傳遞參數是鎖。區域鎖就是把鎖封裝到一個對象里面。鎖的初始化放到構造函數,鎖的釋放放到析構函數。這樣當鎖離開作用域時,

析構函數會自動釋放鎖。即使運行時拋出異常,由于析構函數仍然會自動運行,所以鎖仍然能自動釋放。一個典型的區域鎖

void test()

{

boost::mutex::scoped_lock lock(m_mutexAccessServiceManager);

m_mapAccessServiceManager.clear();

}


應用于有大量的return返回的代碼,避免出現死鎖的問題


擴展

std::scoped_lock提供了可變參數長度的構造器,接收多個鎖。允許在可能導致死鎖的狀態下,對多個互斥量加鎖。例如:
{
??? // safely locked as if using std::lock
??? std::scoped_lock<std::mutex, std::mutex> lock(mutex1, mutex2);????
}
目前std::lock_guard已經被廢棄,GCC7已經完整支持

friend void swap(X& lhs, X& rhs)
{
??? if (&lhs == & rhs)
??????? return;
??? std::lock(lhs.m, rhs.m);
??? std::lock_guard<std::mutex> lock_a(lhs.m, std::adopt_lock);
??? std::lock_guard<std::mutex> lock_b(rhs.m, std::adopt_lock);
??? swap(lhs.some_detail, rhs.some_detail);
}

friend void swap(X& lhs, X& rhs)
{
??? if (&lhs == &rhs)
??????? return;
??? std::scoped_lock guard(lhs.m, rhs.m);
??? swap(lhs.some_detail, rhs.some_detail);
}

引用
https://stackoverflow.com/questions/43019598/stdlock-guard-or-stdscoped-lock

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富民县| 洛川县| 阜宁县| 大埔区| 双鸭山市| 隆安县| 宁南县| 曲水县| 平乐县| 文登市| 东平县| 平泉县| 榕江县| 克拉玛依市| 综艺| 安顺市| 瓦房店市| 广元市| 西乌珠穆沁旗| 赣榆县| 琼结县| 西藏| 闽清县| 色达县| 沧源| 社会| 霍城县| 大洼县| 揭东县| 衡东县| 谷城县| 鹿邑县| 大田县| 黑龙江省| 云和县| 定远县| 扎兰屯市| 轮台县| 华蓥市| 招远市| 滦南县|