1
我好奇地嘗試了一些東西,它似乎不起作用。在同樣的功能我做成功的互斥鎖鎖定
std::mutex mtx1,mtx2;
mtx1.lock();
mtx2.lock();
mtx1.unlock();
mtx2.unlock();
然後,我啓動它的幾個線程。它出乎意料地(對我來說)完成了僵局。 我想明白爲什麼。
(誰是想知道爲什麼我想知道這樣的事情,當時的想法是創建一個互斥字典,並保護前往該字典互斥) 感謝
這看起來很像5餐哲學家的問題:https://en.wikipedia.org/wiki/Dining_philosophers_problem – IlBeldus
不要手動鎖定互斥鎖!使用'std :: lock_guard'或'std :: unique_lock'。我們已經不再是90年代了。最壞的情況,編寫你自己的RAII類來鎖定和解鎖。 –
這些也是(如果自然使用的話)保證以相反的鎖定順序解鎖,這是避免嵌套互斥鎖通常的規則。 – Useless