Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
std::atomic разве не решил бы проблему?memory_order_relaxed, чтобы показать, как оно может глючить.if (flag.compare_exchange_strong(expected, 1, memory_order_acquire))
{
// The lock succeeded
}if (flag.compare_exchange_strong(expected, 1, memory_order_acq_rel))
{
// The lock succeeded
}Как я понимаю, проверить любой код на отсутствие таких лаж невозможно.Это технически возможно, просто до поры до времени это не очень волновало даже самих производителей процессоров, но последние несколько лет ситация поменялась. Сейчас есть исследовательская группа в Кембридже (и сочувствующие в INRIA и прочих учреждениях), которая формализировала модели памяти SPARC, x86 и Power (раз и два). Есть люди, интересующиеся формальной верификацией поверх слабых моделей памяти (например, C++).
Демонстрация сбоев программы при отсутствии барьеров памяти