ну это вроде нормально .. единственная проблема случится в этом случае
пусть нить A будет вашей проверочной нитью, а B - модифицирующей.
Дело в том, что проверка на равенство не является атомарной с технической точки зрения, сначала значения должны быть скопированы в регистры, затем проверены и затем восстановлены. Предположим, что поток A скопировал для регистрации, теперь B решает изменить значение, теперь значение вашей переменной изменяется. Поэтому, когда управление возвращается к A, оно скажет, что оно не равно нулю, даже если оно будет соответствовать времени вызова потока. Это кажется безвредным в этой программе, но МОЖЕТ вызвать проблемы ..
Используйте мьютекс .. простой enuf .. и вы можете быть уверены, что у вас нет ошибок синхронизации!