Как реализовать новый вид инструкции сравнения и обмена
Мне нужно реализовать (псевдокод) новый тип объекта сравнения и обмена (a,b) (CAS) (давайте назовем новый тип CAS2) .
Объекты CAS и CAS2 поддерживают операцию чтения, которая возвращает значение объекта.
Они оба поддерживают операцию сравнения и замены (a, b), но в то время как на CAS эта операция возвращает значение true/false и изменяет значение объекта на b, если оно равно a, на CAS2 эта операция имеет тот же эффект, но вместо возврата true/false, он всегда должен возвращать значение объекта до операции.
Например:
Если значение объекта CAS равно 4, сравнение &swap (4,5) вернет true и изменит значение на 5, но для объекта CAS2 сравнение &swap (4,5) вернет 4 и также изменит значение на 5 . Если значение объекта CAS равно 4, то сравнение &swap (5,6) вернет false и ничего не сделает, но на CAS2 сравнение &swap (5,6) вернет 4 и также ничего не сделает. Объект CAS2 должен быть реализован с использованием только одного объекта CAS, и реализация должна быть без ожидания и линеаризуемой.
Заранее спасибо!