I think I have figured out the sequence of events leading to this issue:
Thread 1 enters if (_state == 3)
Context switch
Thread 2 enters if (_state == 3)
Thread 2 increments state (state = 4
)
Context switch
Thread 1 reads _state
as 4
Context switch
Thread 2 sets _state = 3
Thread 2 enters if (_state == 3)
Context switch
Thread 1 executes _state = 4 + 1
Context switch
Thread 2 reads _state
as 5
Thread 2 executes _state = 5 + 1
;