Как в с ++ при доступе std::atomics
Я могу частично частично ослабить гарантии заказа, используя memory_order_acquire
или же memory_order_release
с std::atomics::load()
а также std::atomics::store()
, Или используя std::memory_order_relaxed
Мой вопрос: это возможно в Java? Я имею в виду, есть ли какая-либо концепция барьера в Java?
Пожалуйста, поправьте меня, если я очень ошибаюсь.
Ява одновременный пакет должен иметь все необходимые инструменты, включая CyclicBarrier и Phaser (многоразовый барьер).
Правильный порядок памяти в Java гарантирован при любом вызове изменчивой переменной, относительно всего, что происходило раньше. Поскольку эти барьеры внутренне используют изменчивые переменные, порядок памяти также гарантируется после каждого barrier.await()
вызов.
Для более точного порядка вы должны использовать свои собственные переменные переменные, но с учетом стандартного кодирования (читай: не изобретать колесо, а используя библиотеку Java), практически нет причин для этого.
Да, параллелизм Java допускает своего рода защелку или барьер. смотреть на CountDownLatch
а также CyclicBarrier
.
Оба они созданы с фиксированным числом потоков, передаваемых в качестве параметра конструктора. Когда достаточно темы await()
этот барьер тогда он освободит для всех потоков.
Не уверен, что у меня есть это право, но быстрое сканирование C ++ 11 семантика memory_order_acquire и memory_order_release? предполагает, что вы можете искать:
volatile variable;
Посмотри пожалуйста Летучий против статического в Java немного больше volatile
и т.п.