когерентность кеша в приложении - PullRequest
1 голос
/ 20 февраля 2011

протокол когерентности кэша хорошо известен в многоядерном контексте, который находится на аппаратном низком уровне, однако аналогичный случай мы встретим в прикладной области.В последнее время я работаю над проектом, в котором два потока обновляют общие объекты.

  1. Поток пользовательского интерфейса отвечает за отображение и обновление (посредством действий пользователя) объектов.
  2. Периодический поток фоновой репликацииобновляет общие объекты, если что-то изменяется другими пользователями.

, поскольку у нас много объектов (50 000 ~ 100 000), каждый поток должен копировать часть объектов в свой собственный буфер, обновляя общие объектыявляется серийным.

  1. Поток пользовательского интерфейса не будет обновлять объект каждый раз, когда пользователи обновляются.
  2. Поток фоновой репликации будет обновлять объекты сразу после обнаружения изменений, а затем уведомлять поток пользовательского интерфейса об обновлении.

Таким образом, возникает вопрос: если конфликт объектов обновляется двумя потоками?Есть ли какая-нибудь распространенная идиома, чтобы справиться с этим делом?

1 Ответ

0 голосов
/ 21 февраля 2011

Самый простой способ справиться с этим - использовать мьютекс.Пользовательский интерфейс блокирует мьютекс до того, как он прочитает значение, а затем разблокирует его.Фоновый поток блокирует мьютекс до того, как обновляет значение, а затем разблокирует его.

Вы можете сделать так, чтобы поток обновления отправлял пользовательскому интерфейсу уведомление с указанием перечитать общий объект, как вы предложили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...