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

Барьеры памяти и большие структуры?
Допустим, у меня есть структура, состоящая из 100 байтов. Какие гарантии у меня есть по поводу следующего кода? m_myLargeStruct = someValue; // copying 100 bytes Thread.MemoryBarrier(); // Executed by another thread, after "Thread.MemoryBarrier"...
514 просмотров

Использование барьеров памяти
В следующем примере кода требуется ли барьер памяти в FuncA для обеспечения чтения самого последнего значения? class Foo { DateTime m_bar; void FuncA() // invoked by thread X { Thread.MemoryBarrier(); // is required?...
548 просмотров
schedule 26.06.2023

Вставка инструкций Fence с помощью JVM/JIT
Модель памяти Java дает гарантию DRF (свобода гонки данных), что означает, что программа, свободная от гонки данных, при выполнении в модели расслабленной памяти Java будет давать то же поведение, что и при последовательном последовательном...
741 просмотров
schedule 04.03.2022

Создает ли std::mutex забор?
Если я заблокирую std::mutex , всегда ли я буду получать ограничение памяти? Я не уверен, подразумевает ли это или заставляет вас получить забор. Обновлять: Нашел эту ссылку после комментариев RMF. Многопоточное программирование и...
5099 просмотров

Ограничение памяти для микропроцессоров x86
Недавно я начал с курса по компьютерной архитектуре на интернет-ресурсе. Я прочитал из одной из книг, которую взял, что процессоры x86 имеют 32 адресные строки и могут читать данные по шине данных по 4 байта за раз. Теперь я понимаю, что 32 адресные...
413 просмотров
schedule 22.03.2022

Нужна помощь в понимании Boost.Atomic модели памяти `memory_order_release` Пример
Я просматривал документацию по boost Atomic и наткнулся на следующий пример: atomic<int> a(0); thread1: ... /* A */ a.fetch_add(1, memory_order_release); thread2: int tmp = a.load(memory_order_acquire); if (tmp == 1) { ......
996 просмотров
schedule 21.03.2022

pthread_create(3) и гарантия синхронизации памяти в SMP-архитектуре
Я просматриваю раздел 4.11 документа Основных спецификаций Open Group, выпуск 7 (IEEE Std 1003.1, 2013 Edition), раздел 4.11 документа, в котором изложены правила синхронизации памяти. Это наиболее конкретный стандарт POSIX, который мне удалось...
1313 просмотров
schedule 01.02.2022

Зачем нужен лимит порядка памяти на счетчике ссылок?
В примере boost::atomic функция unref : void intrusive_ptr_release(const X * x) { if (x->refcount_.fetch_sub(1, boost::memory_order_release) == 1) { boost::atomic_thread_fence(boost::memory_order_acquire); delete x; } } 1:...
231 просмотров
schedule 28.05.2022

последовательность до модификации порядка согласованности
с http://en.cppreference.com : Ослабленное упорядочение Атомарные операции с тегами std :: memory_order_relaxed не являются операциями синхронизации, они не упорядочивают память. Они гарантируют только атомарность и согласованность порядка...
313 просмотров

VB.NET: нужно ли мне вызывать Thread.MemoryBarrier() перед каждым чтением, если я всегда завершаю запись с помощью Thread.MemoryBarrier()?
VB.Net не имеет эквивалента ключевого слова C# volatile, поэтому вам нужно вручную реализовать volatile, что обычно делается путем вызова Thread.MemoryBarrier() перед чтением и после записи. Так что что-то вроде этого эквивалентно объявлению volatile...
325 просмотров

Определяет ли POSIX модель согласованности памяти (адресация многопоточности)?
Определяет ли POSIX модель согласованности памяти для своего многопоточного интерфейса (семафоры и потоки)? Я говорю не об атомарных примитивах, а о псевдоформальной спецификации видимости побочных эффектов в том смысле, что C11 указывает происходит...
28 просмотров

Внеочередное выполнение и переупорядочивание: можно ли увидеть, что после барьера до барьера?
Согласно Википедии: Барьер памяти, также известный как инструкция membar, memory guard или filter, представляет собой тип барьерной инструкции, которая заставляет центральный процессор (ЦП) или компилятор применять ограничение порядка операций с...
867 просмотров

Разница между memory_order_consume и memory_order_acquire
У меня есть вопрос относительно статьи GCC-Wiki . Под заголовком Общая сводка приведен следующий пример кода: Тема 1: y.store (20); x.store (10); Тема 2: if (x.load() == 10) { assert (y.load() == 20) y.store (10) } Говорят, что...
2347 просмотров
schedule 14.10.2022

Что происходит до того, как это означает в спецификации С++ 11?
Я пытаюсь понять значение происходит раньше в спецификации C++11 и, в частности, предполагает ли спецификация какое-либо неформальное понимание термина в дополнение к тому, что указано. Я работаю с проекта N3290. Прямым аргументом в пользу того,...
263 просмотров

Модель памяти с ++: синхронизируются ли загрузки seq_cst с хранилищами seq_cst?
В модели памяти C ++ существует общий порядок всех загрузок и сохранений всех последовательно согласованных операций. Мне интересно, как это взаимодействует с операциями, которые имеют другой порядок памяти, который упорядочен до / после...
309 просмотров

Обеспечивают ли заблокированные инструкции барьер между слабоупорядоченными доступами?
В x86 инструкции с префиксом lock , такие как lock cmpxchg , обеспечивают семантику барьера в дополнение к своей атомарной операции: для нормального доступа к памяти в областях памяти с обратной записью операции чтения и записи не...
555 просмотров

Есть ли у нас гарантия, что любая атомарная запись немедленно сохранит новое значение атомарной переменной в основной памяти?
Итак, я много читал о переупорядочении инструкций и памяти и о том, как мы можем это предотвратить, но у меня до сих пор нет ответа на один вопрос (вероятно, потому, что я недостаточно внимателен). Мой вопрос: есть ли у нас гарантия, что любая...
171 просмотров