Std::Lock позволяет избежать взаимоблокировки, но эта программа зависаетC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std::Lock позволяет избежать взаимоблокировки, но эта программа зависает

Сообщение Anonymous »

Все,
Ссылаясь на вопрос в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как решить проблему взаимоблокировки в ColdFusion 9: coldfusion.util.AbstractCache$Lock
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Когда я подключаюсь к удаленному серверу, scp зависает, команда экрана зависает, htop зависает [закрыто]
    Гость » » в форуме Linux
    0 Ответы
    159 Просмотры
    Последнее сообщение Гость
  • Взаимоблокировки и полная асинхронность
    Гость » » в форуме C#
    0 Ответы
    72 Просмотры
    Последнее сообщение Гость
  • `std::map<std::string, enum{1, 2, 3, 4}>` (или std::map<std::string, tuple<bool, bool>>`) кэширует` против `std: :set<st
    Anonymous » » в форуме C++
    0 Ответы
    327 Просмотры
    Последнее сообщение Anonymous
  • Всегда предпочитаете std :: scoped_lock над Std :: Lock с политикой блокировки?
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»