дорого это, в плане латенси и т.п. есть всякие rise_flag() release_mutex() и т.п., где это уже сделано, но хотели сэкономить. это 32х битный спарк - проблема не в разбивке операции на две инструкции, а в том, что компилер поменял порядок записи объектов в память