Есть ли способ реализовать тип ссылки, значение которой можно обменять на другую атомарно?
В Java у нас есть
11114872] AtomicReference , который может быть заменен на локальную переменную, но не на другую AtomicReference
.
Вы можете:
AtomicReference r1 = new AtomicReference("hello");
AtomicReference r2 = new AtomicReference("world");
и поменять их местами с помощью комбинации двух операций:
r1.set(r2.getAndSet(r1.get()));
Но это оставляет их в противоречивом состоянии между ними, где оба содержат "hello"
. Также, даже если бы вы могли поменять местами атомарно, Они могут быть интернированными , но пул стажеров будет нуждаться в собственной синхронизации, что будет еще одним узким местом.
Можно ли реализовать версию AtomicRefPair
без блокировки? У меня есть подозрение, что это не так, но если нет, то, возможно, где-то есть статья, объясняющая, почему?