具有只读属性的多线程应用程序

时间:2010-06-09 17:26:36

标签: multithreading language-agnostic locking

我的带有只读属性的多线程应用程序是否需要锁定?由于没有写任何东西,我认为不需要锁,但我想确定。这个问题的答案是否与语言无关?

没有锁:

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 :(得分:0)

如果字符串成员永远不会改变,你可以放弃锁定。但是,如果您要不时修改它,公共成员方法需要同步它对私有成员的访问权。

答案 1 :(得分:0)

正确设计的immutable objects通常是线程安全的。风险是“正确设计”是一个复杂的主题 - 请参阅Peter Veentjer's处理Java中不可变线程安全陷阱的一个例子。