Синглтоны в многопоточной среде - PullRequest
2 голосов
/ 12 апреля 2011

при использовании синглетонов, если у класса есть поля экземпляра, следует ли вам быть осторожным, когда несколько потоков могут использовать синглтон? (И поля являются изменяемыми и их значения могут быть изменены)

Я не пробовал, но в теории кажется, что ответ - да, и вам понадобится синхронизация (или пропустить синглтон)

Ответы [ 4 ]

2 голосов
/ 12 апреля 2011

Когда вы получаете доступ к объекту (или к одним и тем же изменяемым данным) из нескольких потоков (или процессов), вам потребуется какая-то синхронизация. Нет разницы, является ли это одноэлементным или любым другим «не-одноэлементным» объектом.

Еще один вопрос, в случае синглетонов - это создание синглтона, хотя, если он создается при первом его использовании, тогда первый раз может быть одновременно для разных потоков, поэтому вам нужно будет синхронизировать создание синглтона. а также.

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

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

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

Вам все равно придется синхронизировать доступ, если он используется совместно, даже если вы передаете его.

Я просто не профессионал в синглтоне, поскольку они, как правило, приводят к потребности в большем количестве синглетонов, чего неизбежно следует избегать.

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

При использовании одиночного экземпляра экземпляр является общим для всех потоков приложения, поэтому да, следует проявлять особую осторожность, чтобы не возникало проблем с параллелизмом.

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

0 голосов
/ 12 апреля 2011

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

...