Junior — Middle
Hogyan biztosítható két mutex atomáris zárolása a holtpontok elkerülése érdekében?
sobes.tech MI
Válasz az MI-től
Két mutex atomikus zárolásakor a kölcsönös zárolás (deadlock) elkerülése érdekében a következő megközelítéseket lehet alkalmazni:
-
Mindig ugyanabban a sorrendben zárolja a mutexeket. Ez a legegyszerűbb és legelterjedtebb módszer a deadlock elkerülésére.
-
Használja az std::lock (C++11 és felette). Ez a függvény egyszerre zárol több mutexet, garantálva a deadlock hiányát.
Példa az std::lock használatával:
#include <mutex>
std::mutex m1, m2;
void func() {
std::lock(m1, m2); // atomikusan zárolja mindkét mutexet
std::lock_guard<std::mutex> lock1(m1, std::adopt_lock);
std::lock_guard<std::mutex> lock2(m2, std::adopt_lock);
// kritikus szekció
}
Ebben az esetben az std::lock zárolja mindkét mutexet, és az std::lock_guard a std::adopt_lock zászlóval átveszi az irányítást a már zárolt mutexek felett.