Этот пост, мой любимый блоггер, расскажет все, что вы когда-либо было о читать и писать барьеры: Barrier (и в очень юмористические и язык-в щеки, тоже)
Статья довольно длинная и начинается с основ синхронизации (мьютексов), а затем глубже и глубже проникает в различные методы синхронизации облегченного веса и подробно обсуждает барьеры. На каждом этапе пути есть примеры программ, в том числе нечетное поведение, которое они имеют (и трудность в том, чтобы это поведение проявлялось на современных машинах из-за поведения процессора).
КСТАТИ (ссылаться на комментарий Ганса) Это не значит, что только Itaniums ошибки синхронизации опыта, это то, что Itaniums разработаны в полной мере воспользоваться полным переназначением и распараллеливания, в предположении, что DEV/компилятор знает, что он/она/делает и будет использовать барьеры во всех необходимых местах. Другие платформы, такие как x86, гарантируют, что некоторые инструкции будут выполнены в порядке, в то время как другие платформы, такие как x86_64, не гарантируют заказы других инструкций, но на практике и в основном по соображениям здравомыслия и совместимости выполняют их (обычно) в -order (см. связанное сообщение в блоге).
Возможно, вы найдете решение, найдя программу, которая использует '_ReadBarrier()', а затем удаляет ее ... –
Сначала вам нужно получить машину с ядром Itanium. Трудно найти, из-за cr * p, как это. –
@HansPassant, где написано, что только Itaniums могут испытывать ошибки из-за того, что не вызывали _ReadBarrier()? –