std::lock (foo,bar); // simultaneous lock (prevents deadlock)
std::unique_lock<std::mutex> lck1 (foo,std::adopt_lock);
std::unique_lock<std::mutex> lck2 (bar,std::adopt_lock);
std::cout << "task a\n";
Вопрос: в конструкторе юник лок уже лочит принятый мютекс. Так что это за еще один вызов std::lock?
Там-то написано "чтобы не было дедлока", но я пока это воспринимаю как "лок два мютекса, потом еще раз лок их по одному в конструкторах".
И не пониаю смысла(
Как же забавно Я прямо сейчас смотрю лекцию по этому вопросу :) https://www.youtube.com/watch?v=dFEBrGJ8j2w&list=PL3BR09unfgcgJPQZKaacwzGmcXMtEA-19&index=21&t=0s
Там передаётся adopt_lock, который значит "забери уже залоченный мьютекс и не лочь в конструкторе"
Обсуждают сегодня