В главе Race condition стерлась разница между race condition и data race. Race condition не является UB в смысле компилятора и безопасности памяти. Только data race является UB, и возникает, если есть два и более обращения к одной переменной, хотя бы одно из которых является записью и хотя бы одно из который несинхронизировано. От data race потенциально можно было бы избавиться ценой производительности. А race condition - это ошибки логики, которые могут существовать в корректной с точки зрения стандарта программе.
И Rust, в целом заимствующий модель атомиков из С++20, обеспечивает в safe гарантии по отсутствию data race и UB, но не пресекает создание race condition.
Спасибо за сборник!
В главе Race condition стерлась разница между race condition и data race. Race condition не является UB в смысле компилятора и безопасности памяти. Только data race является UB, и возникает, если есть два и более обращения к одной переменной, хотя бы одно из которых является записью и хотя бы одно из который несинхронизировано. От data race потенциально можно было бы избавиться ценой производительности. А race condition - это ошибки логики, которые могут существовать в корректной с точки зрения стандарта программе. И Rust, в целом заимствующий модель атомиков из С++20, обеспечивает в safe гарантии по отсутствию data race и UB, но не пресекает создание race condition.