1

Я не понимаю их. Предположим, что у меня есть значение 10 по адресу памяти x.Строгое согласование по сравнению с последовательным

Если мы имеем

thread1: 
Read(x) 
x+=5 
Write(x) 

, а затем:

thread2: 
Read(x) 
x+=2 
Write(x) 

Я не понимаю, что действует последовательная или строгая последовательность.

Как здесь, это действительный результат строгого согласования?

T1: R(x), found 10    W(x), x is now 15 
T2     R(x),found 10      W(x), x is now 12 

Это кажется бесполезным. x имеет неправильное значение ... он не был аддитивным. Тем не менее, доступ, выполняемый каждым процессором, был сохранен в порядке, и каждый из них видел тот же порядок. Это критерий строгой последовательности, не так ли? Не имеет значения, что результат раздавлен.

И для последовательной согласованности ... Я не понимаю различия между ними и строгими.

ответ

1

Частично адресация Ваш вопрос:

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

Но они все еще последовательны. Моя собственная интерпретация заключается в том, что переупорядочение операций в ячейке памяти после их выдачи нарушит требование согласованности. Как будто глобальный билет был приобретен во время выпуска, а механизм исполнения награждает заказ билетов.

«Проблема», если мы можем это назвать, связана с самой задачей - в том, что T1 и T2 могут свободно отправлять их в любом порядке. Если приложение удовлетворено этим уровнем согласованности, оно должно с радостью использовать его.

Гипотетическая ситуация: мы хотим, чтобы некоторое место в памяти было обновлено несколькими потоками и читателем после того, как все завершенные потоки должны были прочитать последнее записанное значение - вам нужно только последнее, чтобы выиграть в том порядке, в котором они были выпущены. Конечно, это узкая ситуация, но в некоторых случаях она желательна.