Что произойдет, если два процесса в разных процессорах попытаются получить блокировку ровно в одно и то же время

Итак, я читаю о синхронизации и читаю различные алгоритмы, такие как спин-блокировки, семафоры и мьютексы, чтобы избежать состояния гонки.

Однако эти алгоритмы не могут предотвратить состояние гонки в SMP, когда множественные процессы обращаются к данным в одно и то же время.

Например, предположим, что поток 1 в процессоре A выполняет блокировку (mutex1); отзывать (1000); разблокировать (mutex1);

и поток 2 в процессоре B запускает блокировку (mutex1); депозит (1000); депозит (1000); разблокировать (mutex1);

Когда оба потока работают точно в то же время, оба потока будут одновременно находиться в критической секции.

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

Есть ли поддержка на аппаратном уровне, чтобы избежать такой ситуации, когда несколько процессоров пытаются получить блокировку в одно и то же время?

(это не проблема атомарности, а проблема точного параллелизма, и мне интересно, как SMP справляется с этим).

Ответы на вопрос(5)

Ваш ответ на вопрос