我的带有只读属性的多线程应用程序是否需要锁定?由于没有写任何东西,我认为不需要锁,但我想确定。这个问题的答案是否与语言无关?
没有锁:
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
答案 0 :(得分:0)
如果字符串成员永远不会改变,你可以放弃锁定。但是,如果您要不时修改它,公共成员方法需要同步它对私有成员的访问权。
答案 1 :(得分:0)
正确设计的immutable objects通常是线程安全的。风险是“正确设计”是一个复杂的主题 - 请参阅Peter Veentjer's处理Java中不可变线程安全陷阱的一个例子。