От этого всего у меня вопросы:
1) Гарантируется ли что-нибудь относительно порядка вызова функций синхронизации? или компилятор тут тоже может оптимизировать как захочет?
2) Имеет ли право компилятор все переменные держать в регистрах? (где об этом в стандарте сказано?)