] Как избежать проблем с согласованностью кэша в Delphi с помощью критического раздела? [

] [

] Я только что прочитал статью MSDN [] «Проблемы синхронизации и многопроцессорности» [], в которой рассматриваются проблемы согласованности кэша памяти на многопроцессорных машинах. Это действительно открыло мне глаза, потому что я бы не подумал, что в приведенном ими примере может быть состояние гонки. В этой статье объясняется, что запись в память на самом деле может не происходить (с точки зрения другого процессора) в том порядке, в котором она написана в моем коде. Для меня это новая концепция! [

] [

] В этой статье представлены 2 решения: [

] [

    ] [
  1. ] Использование ключевого слова volatile для переменных, которым требуется согласованность кеша на нескольких процессорах. Это ключевое слово C / C ++, которое мне недоступно в Delphi. [
  2. ] [
  3. ] Использование InterlockExchange () и InterlockCompareExchange (). Это то, что я мог бы сделать в Delphi, если бы мне пришлось. Это просто кажется немного беспорядочным. [
  4. ] [

] [

] В статье также упоминается, что «Следующие функции синхронизации используют соответствующие барьеры для обеспечения упорядочения памяти: • Функции, которые входят в критические разделы или выходят из них».[

] [

] Это та часть, которую я не понимаю. Означает ли это, что любые записи в память, которые ограничиваются функциями, использующими критические секции, защищены от проблем согласованности кеша и порядка памяти? Я ничего не имею против функций Interlock * (), но было бы неплохо иметь еще один инструмент в моем арсенале! [

]

11
задан Troy 28 August 2011 в 19:16
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: