Если бы я использовал какой-то алгоритм, который использует операции InterlockCompareExchange над переменной в C ++, который определяет, записывается ли набор данных определенным потоком (путем создания моей собственной маленькой блокировки), как я могу гарантировать, чтосблокированная операция, которая обновила значение, сразу же просматривается другим потоком, если данные хранятся, например, в кеше 2 уровня на i7.
Я знаю, что когерентность кэша используется для обеспечения согласованности данных между кэшами многоядерных процессоров, но как насчет небольшого промежутка времени, когда одно ядро обновляет переменную с помощью функции блокировки, а кэш проверяет и исправляетпроблемы когерентности все время, пока другое ядро проверяет эту переменную в своем собственном кэше?Устранена ли эта проблема, если бы я гарантировал, что переменная с операцией InterlockCompareExchange будет изменчивой, чтобы изменения записывались непосредственно в память?Правильно ли я считаю, что барьер памяти (MemoryBarrier () на VS) не обеспечивает когерентность кэша, а только обеспечивает переупорядочивание нежелательных команд?
Надеюсь, мой вопрос не слишком расплывчатый.Я постараюсь ответить на любые комментарии, если я был.У меня нет исходного кода для публикации с этим вопросом, так как у меня нет особых проблем, но я хотел бы знать для дальнейшего использования, могут ли быть какие-либо проблемы с этим, особенно с c ++ 0x, имеющим блокировки как частьсвоей стандартной библиотеки.
Спасибо.