Блокировка резьбы в больших приложениях Parralel - PullRequest
1 голос
/ 14 апреля 2011

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

Что является наилучшей практикой в ​​управлении потоками 'контексты синхронизации '& c.в больших приложениях?Кажется, единственное надежное решение - сделать приложение синхронизации данных таким широким, чтобы данные могли безопасно использоваться любым объектом в любое время, но это, кажется, нарушает концепции объектно-ориентированного кодирования.

Как лучше всего решить эту проблему?

1 Ответ

1 голос
/ 14 апреля 2011

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

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

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