Может ли реализация std:: atomic в отношении блокировок изменять поведение программы от правильного до неправильного?

Существуют ли программы С++, которые являются правильными и тупиковыми, когда atomic::is_lock_free возвращает true, но являются undefined или могут содержать тупик, когда atomic::is_lock_free возвращает false?

Учитывая, что любая блокировка внутри атома будет получена и выпущена под управлением библиотеки, я не могу себе представить, как обманывать вещи, но с помощью многопоточности и блокировок обычно существует способ: -)

Ответ 1

Чтобы иметь тупик в программе, вам нужно удерживать одновременно более одного замка. Доступ или изменение переменной std::atomic<T> может получить блокировку в соответствии со стандартом С++ 11, но он освобождает блокировку, как только вызов функции завершен, и он не вызывает какую-либо определенную пользователем функцию, удерживая блокировку, поэтому вы не можете имеют ситуацию, когда два (или более) мьютекса блокируются одновременно; следовательно, при std::atomic внутренних заблокируемых объектах не существует взаимоблокировки.