Вопросы по теме 'memory-model'

Использует ли Interlocked.CompareExchange барьер памяти?
Я читаю сообщение Джо Даффи о Volatile чтения и записи и своевременности , и я пытаюсь понять кое-что о последнем примере кода в сообщении: while (Interlocked.CompareExchange(ref m_state, 1, 0) != 0) ; m_state = 0; while...
7821 просмотров

Алгоритм Петерсона в Java?
Есть ли пример реализации алгоритма Петерсона для взаимного исключения в Java?
14092 просмотров

Модель памяти Java: компилятор переупорядочивает строки кода
Хорошо известно, что язык Java позволяет компиляторам переупорядочивать строки скомпилированного кода до тех пор, пока переупорядочивание не влияет на семантику кода. Однако компилятор должен заботиться только о сематике, как видно из текущего...
670 просмотров
schedule 01.09.2022

Предотвращает ли атомарность в С++ 11 повторное чтение компилятором общих переменных?
Я второй раз смотрю на великий доклад Херба об атомном оружии и пытаюсь осмыслить концепции, которые проходят через всю историю модели памяти / последовательной согласованности. Есть одна вещь, которая беспокоит меня сейчас на концептуальном уровне....
286 просмотров
schedule 21.01.2023

Содержит ли такое использование семантики выпуска/приобретения потенциальную гонку данных?
Рассмотрим следующий код, который я нашел на http://preshing.com/20120913/acquire-and-release-semantics/ (но я уверен, что часто встречал его в других местах) Общий код: int A = 0; std::atomic<int> Ready(0); Код, выполняемый...
116 просмотров

Какие варианты использования memory_order_relaxed
Модель памяти C ++ имеет ослабленную атомарность, которая не дает никаких гарантий упорядочивания операций с памятью. Кроме примера почтового ящика на C, который я нашел здесь: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1525.htm На...
3678 просмотров
schedule 11.10.2022

Заборы с неатомиками в C11
Есть ли способ использовать заборы, чтобы рассуждать о поведении неатомарных операций в C11? В частности, я хотел бы сделать код безопасным в ситуациях, когда некоторые поля должны быть int для совместимости со старыми интерфейсами, которые могут,...
404 просмотров
schedule 18.08.2022

Отличается ли atomic_thread_fence (memory_order_release) от использования memory_order_acq_rel?
cppreference.com предоставляет это примечание о std::atomic_thread_fence (выделено мной): atomic_thread_fence накладывает более строгие ограничения синхронизации, чем операция атомарного хранилища с тем же std :: memory_order. В то...
1720 просмотров

атомарное хранилище нагрузки с порядком памяти
Сначала поток A запускает x.store(1, std::memory_order_release) , затем поток B запускает x.load(std::memory_order_acquire) . x в потоке B не гарантируется чтение 1, сохраненного A. Если я использую memory_order_seq_cst , будет ли он...
231 просмотров

std :: atomic ‹int› memory_order_relaxed VS volatile sig_atomic_t в многопоточной программе
volatile sig_atomic_t дает ли какие-либо гарантии порядка памяти? Например. если мне нужно просто загрузить / сохранить целое число, можно ли его использовать? Например. здесь: volatile sig_atomic_t x = 0; ... void f() { std::thread...
408 просмотров

C ++ memory_order_acquire / вопросы выпуска
Я недавно узнал о шести порядках памяти в С ++, меня очень смущали memory_order_acquire и memory_order_release , вот пример из cpp: #include <thread> #include <atomic> #include <cassert> std::atomic<bool> x = {false};...
195 просмотров

Почему бы не использовать std::memory_order_acq_rel
Недавно я изучаю код проекта cppcoro. И у меня есть вопрос. https://github.com/lewissbaker/cppcoro/blob/master/lib/async_auto_reset_event.cpp#L218 https://github.com/lewissbaker/cppcoro/blob/master/lib/async_auto_reset_event.cpp#L284 if...
126 просмотров