Какой вывод можно сделать по результату атомарных операций?

// Thread 1:
obj.store(1,Release);  // #1

// Thread 2:
obj.store(2, Release);  // #2

//Thread 3:
 obj.load(Acquire);  // #3
 obj.load(Relaxed);  // #4

Предположим, #3 читает значение 1 и #4 читает значение 2, можно легко сделать вывод, что:

  1. #1 происходит раньше #3, согласно

[введение.расы] стр.9.1

A синхронизируется с B

  1. #2 не бывает раньше #3, согласно

[введение.гонки] стр. 18

Если побочный эффект X на атомарный объект M происходит до вычисления значения B для M, то оценка B берет свое значение из X или из побочного эффекта Y, который следует за X в порядке модификации M.

  1. #3 происходит раньше #4, согласно

[введение.расы] стр.10.1

A секвенируется перед B

Соедините третье условие и [intro.races] стр. 16.

Если вычисление значения A атомарного объекта M происходит до вычисления значения B для M, и A получает свое значение в результате побочного эффекта X на M, то значение, вычисленное B, является либо значением, сохраненным X, либо значением, сохраненным побочный эффект Y на M, где Y следует за X в порядке модификации M.

Мы можем сделать вывод, что побочный эффект #2 следует за #1 в порядке модификации obj.

Итак, можем ли мы сделать вывод, что #1 происходит раньше #2 согласно [intro.races] стр.15

Если операция A, которая изменяет атомарный объект M, происходит до операции B, которая изменяет M, то A находится раньше, чем B в порядке модификации M.

Мне кажется, что «А раньше, чем Б в М» — это лишь необходимое условие для того, чтобы «А произошло раньше Б», другими словами, кажется, мы не можем сделать вывод, что #1 происходит раньше #2, верно?

В первом абзаце: «Предположим, №1 читает значение 1, а №2 читает значение 2». Но №1 — это магазин. Вы имели в виду №3 читает 1 и т. д.? Кроме того, я бы рекомендовал форматирование новых строк или маркированного списка для цитат из стандарта. Обратите внимание: поскольку все эти обращения относятся к одному и тому же объекту, порядок выше relaxed не имеет значения. Два хранилища относятся к разным потокам, и две загрузки одного и того же объекта в одном потоке уже должны принимать то же или более позднее значение в порядке модификации, что и последняя загрузка одного и того же объекта.

Peter Cordes 19.03.2024 04:16

@PeterCordes Это опечатка. Я отредактировал свой вопрос. Интересно, можем ли мы сделать вывод, что A происходит раньше B, если мы знаем, что A находится раньше, чем B в порядке модификации согласно [intro.races] стр.15.

xmh0511 19.03.2024 04:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Давайте еще раз посмотрим на это предложение:

Если операция A, которая изменяет атомарный объект M, происходит до операции B, которая изменяет M, то A находится раньше, чем B в порядке модификации M.

Это предложение принимает форму «если X, то Y», где X означает «операции A и B модифицируют атомарный объект M, где A происходит раньше B», а Y означает «A находится раньше, чем B в порядке модификации M».

Однако логически невозможно сделать обратный вывод, т. е. «если Y, то X». Если A предшествует B в порядке модификации M, на основании одного только этого правила нельзя заключить, что A происходит раньше B.

Спасибо за Ваш ответ. По этой логике мне интересно, что является контрапозитивом [intro.races] p14, если исходное предложение принимает форму «если X, то Y», я думаю, так и должно быть: если B не происходит раньше A, то значение Вычисление B — это некое неопределённое A. Противоположность этого утверждения, IIUC, состоит в том, что: если вычисление значения B не является каким-то неопределённым A, то B не происходит раньше A, верно? «не происходит до» означает происходит после или неупорядоченно? Значит, отрицание «не происходит раньше» означает, что A происходит раньше B?

xmh0511 20.03.2024 03:02

Другие вопросы по теме