Есть ли скрытые опасности ABA в CAS

Когда я узнал из Глубокое понимание JVM, даже если произошло ABA, как цифровое вычитание , Операция со строкой я думаю, что это не влияет на результаты операции

Если переменная V сначала считывается со значением A, и когда она назначается, проверяется, что это все еще значение A, означает ли это, что ее значение не было изменено другим потоком? Это невозможно сделать, потому что, если его значение было изменено на B в промежуточный период, а затем снова изменено на A, операция CAS будет считать, что оно никогда не менялось. Эта уязвимость называется «проблемой ABA» для операций CAS.

Пакет JUC решает эту проблему, предоставляя пакет с атомарной ссылкой на класс тегов AtomicStamp EdReference, который может гарантировать правильность CAS, контролируя версию значения переменной. Однако на данный момент этот класс находится в очень слабом положении. В большинстве случаев проблема ABA не влияет на корректность параллелизма программы. Если вам нужно решить проблему ABA, может быть более эффективным переключиться на традиционную синхронизацию мьютексов, чем на атомарные классы.

0 ответов

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