[閒聊] mutex_lock 是會直接把執行續卡住嗎

看板Marginalman作者 (Wardyal)時間1年前 (2024/08/08 15:26), 編輯推噓4(4015)
留言19則, 5人參與, 1年前最新討論串1/1
func1() { ... ... ... mutex_lock(&my_lock) ... return; } func2() { mutex_unlock(&my_lock) } 我假如 func1(); func1(); 那第一個func1()會順利執行 然後第二個func1()會卡在mutex_lock() 直到我下func2() 是這樣嗎 我剛剛又把自己的code鎖爛了 現在在debug -- 環醬可愛 https://imgur.com/EF5SmX4.gif
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.91.73 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1723101978.A.372.html

08/08 15:35, 1年前 , 1F
恐龍書都有寫
08/08 15:35, 1F

08/08 15:36, 1年前 , 2F
恐龍書在家 而且我沒看完過
08/08 15:36, 2F

08/08 15:44, 1年前 , 3F
沒理解錯的話會卡在第一個吧?
08/08 15:44, 3F

08/08 15:44, 1年前 , 4F
你解了一個他會執行第二個,然後又卡住。
08/08 15:44, 4F

08/08 15:44, 1年前 , 5F
直到下第二次解鎖才是完整完成。
08/08 15:44, 5F

08/08 15:47, 1年前 , 6F
喔喔 他會先解第二個喔
08/08 15:47, 6F

08/08 15:47, 1年前 , 7F
我以為他是會先解第一個
08/08 15:47, 7F

08/08 15:47, 1年前 , 8F
你這樣lock 2次是undefined behavior吧
08/08 15:47, 8F

08/08 15:48, 1年前 , 9F
我現在是第二次跑會卡住 因為我中間有些retrun忘記unlock
08/08 15:48, 9F

08/08 15:48, 1年前 , 10F
實際上unlock是定義在func1裡面
08/08 15:48, 10F

08/08 15:50, 1年前 , 11F
他會卡在你下的那個位置,先進應該是先解的,但你的
08/08 15:50, 11F

08/08 15:50, 1年前 , 12F
假程式
08/08 15:50, 12F

08/08 15:50, 1年前 , 13F
… lock …
08/08 15:50, 13F

08/08 15:50, 1年前 , 14F
前面有一部分會執行到,後面也有。
08/08 15:50, 14F

08/08 15:50, 1年前 , 15F
你解鎖的話第二次的func1也會執行到一部分然後進鎖
08/08 15:50, 15F

08/08 15:52, 1年前 , 16F
恩恩 大概懂了 感謝
08/08 15:52, 16F

08/08 15:52, 1年前 , 17F
反正邏輯就是,你鎖幾次,就要解幾次,沒解到一樣的
08/08 15:52, 17F

08/08 15:52, 1年前 , 18F
數量一定有鬼
08/08 15:52, 18F

08/08 16:09, 1年前 , 19F
用這個,std::lock_guard<std::mutex> lock(mtx);
08/08 16:09, 19F
文章代碼(AID): #1cj7CQDo (Marginalman)