Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Гарантирует ли стандарт атомарное чтение и запись данных, размер которого не более чем машинное слово?

02.03.2018, 22:16. Показов 3576. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Насколько я знаю атомарность для чтения и записи данных которые не более чем одно машинное слово, гарантируется на уровне процессора. А со стороны стандарта с++ есть подобные гарантии? Тут речь не про std::atomic, а именно про обычные переменные.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2018, 22:16
Ответы с готовыми решениями:

Найти минимальный элемент, двоичная запись которого заканчивается не более чем двумя нулями
25 задача ЕГЭ Здравствуйте. Дан массив, содержащий 2020 положительных целых чисел, не превышающих 15 000. Необходимо найти...

Вывести слово минимальное по величине столько раз, сколько букв в первом слове, если это слово более чем из
Вывести слово минимальное по величине столько раз, сколько букв в первом слове, если это слово более чем из трех букв. В противном случае...

Из 8 машинных слов сформировать новое машинное слово. Подсчитать количество идентичных слов в сегменте данных.
Разработать программу, выполняющую действия в соответствии с вариантом задания. Все задания должны быть выполнены на основе принципа...

61
6 / 6 / 2
Регистрация: 27.08.2017
Сообщений: 28
10.03.2018, 15:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Undisputed Посмотреть сообщение
Разберемся что из себя представляет acquire. По сути это LoadLoad LoadStore барьер памяти.
Ты опять лезешь в детали реализации...
Можно без блокирующихся ядер?

Цитата Сообщение от Undisputed Посмотреть сообщение
LoadLoad применяются к invalidate queue процессора (заставляет процессор выполнить синхронизацию типа "чтение" с кэшами других процессоров. в эту очередь помещаются сообщения об изменении данных другими ядрами).
Насколько я помню, в общем случае барьеры просто не дают переставлять определённые операции через барьер.
Откуда дополнительные свойства барьеров?

Цитата Сообщение от Undisputed Посмотреть сообщение
Стандарт в свою очередь насколько я понимаю просто требует
Нет, не требует. Это то редкое место, где стандарт не требует. Такие места, наверное, можно по пальцам одной руки пересчитать.
Требует это "shall", а тут "should". Т.е. он рекомендует. Очень размытыми формулировками, про некое "reasonable amount of time".

Цитата Сообщение от Undisputed Посмотреть сообщение
[29.3/12] Implementations should make atomic stores visible to atomic loads within a reasonable amount of time.
В [intro.multithreaded] есть похожая цитата, но более подробная (как раз про last value):
Цитата Сообщение от http://eel.is/c++draft/intro.multithread#intro.progress-18
An implementation should ensure that the last value (in modification order) assigned by an atomic or synchronization operation will become visible to all other threads in a finite period of time.
Т.е. стандарт рекомендует, чтобы последнее значение стало видимым всем потокам за конечное время (10 млн. лет — это вполне конечное время).
Эта цитата как бы тоже не на стороне твоего утверждения про гарантию чтения последнего значения, т.к. видно, что существование последнего значения и его видимость другим потокам стандарт разделяет. Т.е. оно может существовать, но потоку, выполняющему load acquire, оно может быть не видимо в течение произвольного, но конечного (следующие 10 млн. лет после появления, например) периода времени.

Ну и самое главное: я переформулировал перевод так, что он звучит ближе к оригиналу.
Почему стандарт не говорит нам, что load acquire берёт значение из последнего store release или из последнего side effect-а в modification order, а от любого side effect-a из release sequence (начинающейся с определённого store release)?

Цитата Сообщение от Undisputed Посмотреть сообщение
Вот именно по этой причине я и говорил что будет прочитано последнее значение.
То есть, в предположении неких блокирующихся ядер и прочих invalidation queue, и в предположении определённого отображения конструкций языка (и стандартной библиотеки) на аппаратные особенности, будет читаться последнее значение?
Вроде вопрос был про гарантию со стороны стандарта...
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
10.03.2018, 16:46  [ТС]
Цитата Сообщение от SeqInconsistent Посмотреть сообщение
Требует это "shall", а тут "should". Т.е. он рекомендует.
Да, should это рекомендует. Как то забыл про техническую терминологию.

Цитата Сообщение от SeqInconsistent Посмотреть сообщение
Насколько я помню, в общем случае барьеры просто не дают переставлять определённые операции через барьер. Откуда дополнительные свойства барьеров?
Ты сейчас про барьеры процессорного уровня или про барьеры компилятора?
Если на уровне процессора, тогда это самое "не дают переставлять" как раз таки достигается принудительным освобождением очередей ядра (store и load очереди).
Вот например отсюда:
https://mechanical-sympathy.bl... ences.html
A load barrier, “lfence” instruction on x86, ensures all load instructions after the barrier to happen after the barrier and then wait on the load buffer to drain for the issuing CPU. This makes program state exposed from other CPUs visible to this CPU before making further progress.
Цитата Сообщение от SeqInconsistent Посмотреть сообщение
Т.е. стандарт рекомендует, чтобы последнее значение стало видимым всем потокам за конечное время (10 млн. лет — это вполне конечное время).
Да, видел это в стандарте. Но спецом процитировал пункт [29.3/12] что бы показать тот факт что сам стандарт сторонник того что "этот процесс должен происходить как можно скорее без лишних задержек, если они не оправданы".
На мой взгляд это означает то, что если компилятор должен где то поставить барьер, то не нужно совать еще какие то инструкции до барьера, которые напрямую не связаны с контекстом выполнения. Наверное так обычно и делается. Думаю это просто напоминание разработчикам компиляторов.

Цитата Сообщение от SeqInconsistent Посмотреть сообщение
Вроде вопрос был про гарантию со стороны стандарта...
В общем с точки зрения гарантий ты победил )) Надеюсь тебе стало легче
Но учитывая рекомендацию стандарта и уже изложенную мною информацию, а так же результат выполнения кода с предыдущей страницы, думаю есть все основания полагать, что так и будет (чтение как правило последней записи) и что стандарт рекомендует именно такое компиляторам не препятствовать этому поведению лишними инструкциями и разработчики компиляторов по идее должны следовать этим рекомендациям, если у них нет весомых причин на обратное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2018, 16:46

Как увеличить размер загружаемого файла более чем 100М ?
До 5 гигов?!

Определить существует ли кандидат, за которого проголосовало более чем половина избирателей
Сэм i Юра участвуют в выборах. Но это им показалось слишком скучным, i они опросили всех избирателей, за кого они голосовали. Известно, что...

Тип данных запись: Найти багаж, средний вес одной вещи в котором отличается не более, чем на 0,3 кг от общего среднего веса одной вещи
Найти багаж, средний вес одной вещи в котором отличается не более, чем на 0,3 кг от общего среднего веса одной вещи. Программу надо...

Чтение чисел из двух и более файлов и запись в векторы
В общем моя задача такова: Есть 2 и более файла, каждый из которых наполнен столбцом чисел. Мне нужно прочесть числа из каждого файла и...

Вывод более чем 1 запись по значению
Добрый день. Имеется таблица T1(id,name,primmark,tran),T2(id,crd,date) Как вывести данные из таблицы у которых в таблице T1 по полю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
62
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru