Решение 11 распространенных проблем в многопоточном коде - Изоляция

ОГЛАВЛЕНИЕ

Изоляция

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

Более того, в случае изоляции состояния изменения могут происходить свободно. Это удобно, поскольку изменение являются фундаментальным встроенным аспектом большинства языков в стиле C. Программисты привычны к нему. Программирование в преимущественно функциональном стиле требует дисциплины и довольно сложно для большинства разработчиков. Так что дайте ему шанс, но не заблуждайтесь насчет того, что мир разом станет функционален.

Отслеживать владение непросто. Когда объект становится общим? Когда он инициализирован, это выполняется единственным потоком, и сам поток пока что не достижим из других потоков. После того как ссылка на объект сохранена в статической переменной в каком-нибудь месте, которое было общим в момент создания потока или во время запроса или в поле объекта, который транзитно достижим из одного из этих мест, объект становится общим. Важно, чтобы разработчики специально отслеживали эти переходы между закрытым и общим и обращались со всеми общими потоками осторожно.

Джо Даффи (Joe Duffy)