тут гонка на чтении
count как хочет, потому что другие потоки к нему не обращаются. Более того, если поток освободит мьютекс, а потом захочет захватить его обратно будучи на том же процессоре, он гарантированно увидит, что он не является владельцем. Вот чтобы гарантировать, что он увидит, что он не является владельцем будучи на другом процессоре нужен барьер чтения перед этой проверкой. Ну и аналогично, когда вледелец мьютекса только что захвативший его на одном CPU мигрирует на другой CPU и захватывает его повторно тот же самый барьер гарантирует, что условие проверки владения сработает правильно.Нужен барьер или атомарные операции.
Отсюда и появление ошибки.
объясни, кто с кем гоняется, я не вижу гонки.
Для чего тут атомарные операции?
Total: 0 asc: 0 dsc: 0 eq: 0
Обе упомянутые ошибки 100% детерминированные и воспроизводятся с одним потоком.