Итак, в вопросе атомарности спецификация P CIe 3.0 (только у меня есть) упоминается несколько раз.
Сначала у вас есть РАЗДЕЛ 6.5 Заблокированные транзакции это, вероятно, не то, что вам нужно, но я все равно хочу это задокументировать. По сути, это наихудший сценарий того, что вы описывали ранее.
Требуется поддержка заблокированных транзакций для предотвращения тупиковых ситуаций в системах, использующих устаревшее программное обеспечение, которое вызывает доступ к устройствам ввода-вывода
Но вы должны правильно проверить, используя это в любом случае, как указано.
Если какое-либо чтение, связанное с заблокированной последовательностью, завершилось неудачно, Запрашивающий должен предположить, что атомарность блокировки не равна гарантированно, что путь между запросчиком и завершителем больше не заблокирован
С учетом сказанного Раздел 6.15 Atomi c Операции (AtomicOps) намного больше похоже на то, что вы заинтересованы в. Есть 3 типа операций, которые вы можете выполнять с помощью инструкции AtomicOps.
FetchAdd (выборка и добавление): запрос содержит один операнд, значение «add»
Swap (безусловный обмен): запрос содержит один операнд, значение «swap»
CAS (Сравнить и поменять): запрос содержит два операнда, значение «сравнение» и значение «своп»
Чтение Раздел 6.15.1 мы обратите внимание, что эти инструкции в основном реализованы для случаев, когда на единственной шине существует несколько производителей / потребителей.
AtomicOps обеспечивают расширенные механизмы синхронизации, которые особенно полезны, когда есть несколько производителей и / или нескольких потребителей, которые должны быть синхронизированы неблокирующим способом. Например, несколько производителей могут безопасно поставить в очередь в общую очередь без какой-либо явной блокировки.
При поиске в остальной части спецификации я нахожу мало упоминаний об атомарности за пределами разделов, относящихся к этим AtomicOps. Это означало бы для меня, что spe c обеспечивает такое поведение только при использовании этих операций, однако контекст вокруг того, почему это было реализовано, предполагает, что они ожидают таких вопросов только тогда, когда существует среда с несколькими производителями / потребителями, чего, очевидно, нет у вас.
Последнее место, на котором я бы хотел ответить на ваш вопрос, это Раздел 2.4 Порядок транзакций К сведению, я вполне уверен, что идея "передачи" других транзакций имеет смысл только с переключателями в середине. так как эти коммутаторы могут принимать такие решения, как только вы положите биты на шину, в вашем случае уже нет пути назад. Так что это, вероятно, применимо только в том случае, если вы разместите там переключатель. ![enter image description here](https://i.stack.imgur.com/Mhzh0.png)
Ваша проблема в том, может ли запись обойти чтение. Напишите, что отправлено, прочитано, что не отправлено.
A3, A4 A Posted Request must be able to pass Non-Posted Requests to avoid deadlocks.
Таким образом, в общем случае запись разрешается обходить чтение, чтобы избежать взаимных блокировок.
Учитывая это, я не верю, что запись может обойти чтение на вашем система, так как на шине нет устройства для переупорядочения этой транзакции. Поскольку у вас есть ОСРВ, я очень сомневаюсь, что они запрашивают транзакции P CIe и переупорядочивают их перед отправкой, хотя я не рассматривал это лично.