請教這兩個例子在使用中有區別嗎?請詳細指導一下,在下初學鎖。
例子1:
std::mutex 鎖1;
static int i = 0;
執行緒1:
{
std::lock_guard<std::mutex> lk(鎖1);
i = i + 1;
}
執行緒2:
{
std::lock_guard<std::mutex> lk(鎖1);
i = i + 1;
}
例子2:
std::mutex 鎖1;
std::mutex 鎖2;
static int i = 0;
執行緒1:
{
std::lock_guard<std::mutex> lk(鎖1);
i = i + 1;
}
執行緒2:
{
std::lock_guard<std::mutex> lk(鎖2); //這里是鎖2
i = i + 1;
}
uj5u.com熱心網友回復:
也就是,例子1的兩個執行緒用了同一把鎖1,例子2的兩個執行緒分別用了不同的鎖1和鎖2,這兩種用法哪個是對的?或者兩個都對,但是有區別嗎?請老師指點迷津,非常感謝!uj5u.com熱心網友回復:
例子1是對的。例子2等于沒加鎖。
uj5u.com熱心網友回復:
當然有區別了,例子一相當于現在有一個房間,房間里有個妹紙..額不 ..有個i,然后房間只有一個門,這個門有一把鎖,外邊的人想進去看妹紙...看i,只能拿到鑰匙才能進去,也就是說只有等別人看過了之后出來拿到鑰匙才能進去看。第二個例子相當于這個房間有兩個門,兩個門各有一把鑰匙,所以至少有兩個人是可以同時通過兩個門進去看妹紙..看i的,他們會打架...uj5u.com熱心網友回復:
額,這問題確實挺基礎的,哈哈你先了解一下多執行緒為什么要加鎖吧,加鎖是為了鎖定一個全域資源,一個執行緒訪問這個資源時,另一個執行緒必須等待
你例子2相當于把兩個鎖串起來了,開任意一個鎖就能訪問i,所以是不行的
uj5u.com熱心網友回復:
關照我,看我的博客轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269653.html
標籤:C++ 語言
上一篇:要在鏈式串列中某位置插入一個元素,然后寫了下面這個函式來查找該位置的前一個位置并用指標指向它,最后傳回該指標,但是感覺這個函式有點問題,求大神們幫我看看,怎么改
