Как реализовать иерархическую блокировку или другой шаблон синхронизации? - PullRequest
0 голосов
/ 11 марта 2011

У меня есть серия логически связанных коллекций объектов A, B и C, к которым имеют доступ потоки записи, потоки только для чтения и потоки чтения-записи.

Каждый объект A может иметь несколько связанных объектов B, и каждый объект B может иметь несколько связанных объектов C. Один объект B может быть связан только с одним объектом A, и, аналогично, один объект C может быть связан только с одним объектом B и A. Это означает, что при обновлении A все связанные B и C также должны быть заблокированы, и, наоборот, при обновлении C соответствующие B и A также блокируются?

Как мне добиться синхронизации такой структуры?

1 Ответ

0 голосов
/ 28 июня 2011

при обновлении A, все связанные B и Cs также должен быть заблокирован, и в наоборот, если обновление C, соответствующие B и A также заблокированы

С этим ограничением вам нужен только один мьютекс для каждого набора A и связанных с ним B и C. Этот мьютекс логически принадлежит объекту A, поскольку существует только одна из этих групп, но, вероятно, целесообразно сохранить ссылку на объекты B и C, чтобы ее можно было заблокировать непосредственно оттуда, когда необходимо выполнить обновление. без необходимости сначала обходить дерево объектов, чтобы найти мьютекс.

...