1

Мне нужно реализовать (псевдокод) новый тип сравнения & объект swap (a, b) (CAS) (назовем новый тип CAS2).Как реализовать новый вид команды compare & swap

Объекты CAS и CAS2 поддерживают операцию чтения, которая возвращает значение объекта .

Они оба поддерживают сравнить & своп (а, б) операцию, но в то время как на CAS эта операция возврата истина/ложь и изменяет значение объекта б, если она равна а, на CAS2 эта операция имеет тот же эффект, но вместо того, чтобы возвращать true/false, он должен всегда возвращать объект значение до операции.

Например:

Если значение объекта CAS-4, сравнить & своп (4,5) будет возвращать истинным и изменить значение до 5, а на объекта CAS2, сравните & своп (4, 5) вернет 4, а также изменит значение на 5. Если значение объекта CAS равно 4, сравните & swap (5,6) вернет false и ничего не будет делать, но на CAS2 сравните & swap (5,6) вернет 4 , а также ничего не сделает. Объект CAS2 должен быть реализован с использованием только одного объекта CAS и реализация должна быть безжизненной и линеаризуемой.

Заранее благодарен!

ответ

1

Вариант, который вы запрашиваете, фактически является основным. Реализация такой инструкции без мьютекса требует поддержки аппаратного обеспечения, например, специальной инструкции. Дополнительную информацию см. На странице wikipedia article.