Обьясните по простому как работает compare and swap? Допустим есть переменная которую хочет заинкриментить и поток1 и поток2. Допустим поток1 зашел раньше, правильно ли я понимаю что поток2 может взять ожидаемое значение во время чтения переменной потоком1, но перед тем как поток1 запишет уже новое значение?