В одноядерном процессоре, где все ваши потоки запускаются из одного процессора, возникает идея реализовать критическую секцию, используя атомарную операцию проверки и установки для некоторого мьютекса (или семафора, и т. Д.) В памяти. достаточно просто; поскольку ваш процессор выполняет тестирование и установку из одного места в вашей программе, он не может выполнять одно из другого места в вашей программе под видом другого потока.
Но что происходит, когда у вас на самом деле более одного физического процессора? Кажется, что атомарность на уровне простых команд не будет достаточной, так как два процессора потенциально могут выполнять свои операции тестирования и установки в одно и то же время, для чего вам действительно необходимо поддерживать атомарность, это доступ к расположению общей памяти мьютекс. (И если расположение общей памяти загружено в кеш, то есть и целостность кеша, с которой нужно иметь дело ..)
Кажется, что это повлечет за собой гораздо больше накладных расходов, чем случай с одним ядром, так что вот в чем суть вопроса: насколько он хуже? Это хуже? Мы просто живем с этим? Или обойти это, применяя политику, согласно которой все потоки в группе процессов должны жить в одном физическом ядре?