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

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

02.03.2018, 22:16. Показов 3438. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru