LINUX.ORG.RU

История изменений

Исправление 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. Там забавные примеры войны с компилятором.