Ссылаясь на вопрос в std::lock, все равно вызывал взаимоблокировку
Я все еще не мог понять, в чем проблема в приведенном ниже коде . Может кто-нибудь объяснить проблему и как ее исправить? Почему оно зависает? Пожалуйста, помогите.
Код: Выделить всё
#include
#include
#include
using namespace std;
std::mutex m1;
std::mutex m2;
void func1()
{
std::unique_lock lock1(m1, std::defer_lock);
printf("func1 lock m1\n");
std::this_thread::sleep_for(std::chrono::seconds(1));
std::unique_lock lock2(m2, std::defer_lock);
printf("func1 lock m2\n");
std::lock(m1, m2);
printf("func1 std lock\n");
}
void func2()
{
std::unique_lock lock1(m2, std::defer_lock);
printf("func2 lock m2\n");
std::this_thread::sleep_for(std::chrono::seconds(1));
std::unique_lock lock2(m1, std::defer_lock);
printf("func2 lock m1\n");
std::lock(m1, m2);
printf("func2 std lock\n");
}
int main(int argc,char* argv[])
{
std::thread th1(func1);
std::thread th2(func2);
th1.join();
th2.join();
return 0;
}
func1 lock m1
func2 lock m2
func1 lock m2
func1 std lock
func2 lock m1
----- Висит здесь.< /p>
Почему func2 не продолжает работу, хотя func1 освободила оба мьютекса?
Подробнее здесь: https://stackoverflow.com/questions/589 ... gets-stuck