Стандарт требует наличия атома c операций. Не обязательно CAS, но, по крайней мере, обмен. std::atomic_flag
требуется, чтобы быть истинными атомами c, хотя CAS является излишним для него, простой обмен является удовлетворительным.
Обратите внимание, что любой алгоритм, такой как Деккер, Петерсон или другой, по крайней мере, потребовал бы хранилище atomi c load и atomi c, и они не будут работать, если load и store не атоми c. Кроме того, типы не * Atomi c не предписывают упорядочение памяти, что подразумевается этими алгоритмами.
В действительности не требуется, чтобы std::mutex
был основан на вызовах операционной системы и чтобы существовала операционная система. звонки на всех.
Теоретически, std::mutex
может вращать только мьютекс.
Он также может блокировать только мьютекс.
На практике хорошая реализация сначала пыталась бы обработать блокировку с помощью atomi c, но когда она прибегает к ожиданию, она будет ждать ОС.