Этот пост моего любимого блоггера расскажет все, что у вас когда-либо было о барьерах для чтения и записи: Барьер (и в очень юмористической и насмешливой манере тоже)
Статья довольно длинная и начинается с основ синхронизации (мьютексов), а затем углубляется и углубляется в различные более легкие методы синхронизации и подробно обсуждает препятствия.Есть примеры программ на каждом шагу, включая странное поведение, которое у них есть (и трудности в том, чтобы заставить это поведение проявляться на современных машинах из-за поведения процессора).
BTW, (чтобы сослаться на комментарий Ганса) Дело не в том, что только Itaniums испытывают ошибки синхронизации, а в том, что Itanium разработаны, чтобы в полной мере воспользоваться преимуществами полного переупорядочения и распараллеливания, при условии, что dev / compiler знает, что он / она / она делает и будет иметьиспользовать барьеры во всех нужных местах.Другие платформы, такие как x86, гарантируют, что определенные инструкции будут выполняться по порядку, в то время как другие платформы, такие как x86_64, не гарантируют упорядочение других инструкций, но на практике и в основном по соображениям здравомыслия и совместимости их выполняют.(обычно) в порядке (см. связанный блог).