Что такое пример программы, в которой есть ошибка из-за того, что _ReadBarrier () не вызывается? - PullRequest
3 голосов
/ 31 марта 2012

Что такое пример программы, в которой есть ошибка из-за того, что _ReadBarrier () не вызывается?

Статья MSDN о _ReadBarrier (): http://msdn.microsoft.com/en-us/library/z055s48f(v=vs.120).aspx

1 Ответ

1 голос
/ 31 марта 2012

Этот пост моего любимого блоггера расскажет все, что у вас когда-либо было о барьерах для чтения и записи: Барьер (и в очень юмористической и насмешливой манере тоже)

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


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

...