История изменений
Исправление invy, (текущая версия) :
И это вся гарантия? Т.е. если завтра ему вставят мозг получше и он увидит:
1) ага, mutex залочить нелзья, значит мне не надо соблюдать строгий порядок операций, обращение к &mutex внутри if нету, то я могу смело вызвать unlock сразу после if(!try_lock())
2) вставят еще больше мозгов и он режит: ага, т.е. ты не имеешь права делать unlock, если ты не получил mutex, значит мы выдадим warning и выкинем к чертям собачьим этот unlock
Результат: код поломался.
Почитай Александреску про Double-Checked Singleton. (Это конечно ничего общего кроме «многопоточности» с этим случаем не имеет, но тем не менее). Там забавные примеры войны с компилятором.
Исходная версия invy, :
И это вся гарантия? Т.е. если завтра ему вставят мозг получше и он увидит:
1) ага, mutex залочить нелзья, значит мне не надо соблюдать строгий порядок операций, обращение к &mutex внутри if нету, то я могу смело вызвать unlock сразу после if(!try_lock())
2) вставят еще больше мозгов и он режит: ага, т.е. ты не имеешь права делать unlock, если ты не получил mutex, значит мы выдадим warning и выкинем к чертям собачьим этот unlock
Результат: код поломался.
Почитай Александреску про Double-Checked Singleton. Там забавные примеры войны с компилятором.