11:01p |
упражнения с крышей и шифером у меня такое подозрение, что даже если мютексы сделаны на операциях без тотального упорядочения, с их помощью нельзя "увидеть" на разных процессорах разные последовательности присваивания переменным, которые они защищают.
Т.е. если в треде 1 мы берем мютекс М1 и модифицируем переменную Х1, а в треде 2 мы берем мютекс М2 и модифицируем переменную Х2, то эти две операции модификации никак не упорядочены и разные процессоры могли бы их видеть в разном порядке, но... если они попытаются это увидеть, захватывая те же мютексы M1 и M2, у них это увидеть не получится.
Таким образом, имея тотальную упорядоченность операций на одиночных мютексах и используя (разные!) мютексы для сереализации, можно добиться не много не мало тотальной упорядоченности критических секций вообще, то есть Sequential Consistency.
Если же вместо мютексов и переменных использовать просто переменные с атомарным доступом, то, по идее, увидеть разный порядок их модификации вполне возможно. Неинтуитивный выходит момент: запись и чтение переменной даже под своим индивидуальным мютексом - или использование атомарных переменных -- принципиально разные операции с точки зрения модели памяти.
Получается, что та интуиция, которая развита при работе с мютексами, всё же может как-то сбойнуть при работе с атомарными переменными. Потому что мютексы, так выходит, - дают тотальную упорядоченность, даже если они сами по себе не реализованы с помощью тотально-упорядоченных операций. Понять бы еще - где и как эта интуиция может засбоить.
Вообще, я много всякой фигни пишу последнее время по темам моделей памяти. Наверное, в основном глупости пишу. Буду рад если кто-то поправит. |