Как реализовать новый вид инструкции сравнения и обмена

Мне нужно реализовать (псевдокод) новый тип объекта сравнения и обмена (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, и реализация должна быть без ожидания и линеаризуемой.

Заранее спасибо!

1 ответ

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

Другие вопросы по тегам