Многопоточное приложение со свойствами Readonly - PullRequest
0 голосов
/ 09 июня 2010

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

Без блокировки:

Private Const m_strFoo as String = "Foo"
Public ReadOnly Property Foo() As String
    Get
        return m_strFoo.copy()
    End Get
End Property

с замком:

Private Const m_strBar as String = "Bar"
Public ReadOnly Property Bar() As String
    Get
        SyncLock (me)
            return m_strBar.copy()
        End Synclock
    End Get
End Property

Редактировать: Добавлено Const для полей

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Правильно спроектированные неизменные объекты , как правило, безопасны для потоков.Риск заключается в том, что «должным образом спроектированный» является сложным предметом - см. трактовка Питера Вентье для примера ловушек безопасности неизменяемых потоков в Java.

0 голосов
/ 09 июня 2010

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

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