在著名的Joseph Albahari's article on Threading中,所有被多个线程使用的类变量都声明为
我的问题是关于类属性实现的。我理解如果我使用
这将使变量
但在我的情况下,多线程处理是类实例私有的。它从
我不希望
注意:如果代码中有任何错误,我很抱歉,我实际上正在使用VB.NET并使用工具进行转换。我希望主要问题仍然清晰明了。
static
字段,因此所有线程都可以访问相同的变量。这需要在读/写的所有位置上配备lock()
机制,然后工作就完成了。我的问题是关于类属性实现的。我理解如果我使用
static
备份存储来实现属性Timeout
,那么这是有效的:class MyClassWithWorkerThread {
private readonly object _locker = new object();
private static int _Timeout = false;
private int Timeout {
get {
lock (_locker) {
return _Timeout;
}
}
set {
lock (_locker) {
_Timeout = value;
}
}
}
}
这将使变量
_Timeout
在所有类实例之间共享。但在我的情况下,多线程处理是类实例私有的。它从
New()
开始,以Dispose()
结束。主线程和工作线程都访问Timeout
属性(但_Timeout
备份存储器从未在属性getter / setter之外访问)。我不希望
_Timeout
值适用于整个应用程序。我希望每个类实例都是唯一的。
我的问题是:我可以安全地从_Timeout
变量中删除static
以实现这一点吗?注意:如果代码中有任何错误,我很抱歉,我实际上正在使用VB.NET并使用工具进行转换。我希望主要问题仍然清晰明了。
lock()
(VB:SyncLock ... End SyncLock
)块的做法。实际上,我打算通过创建Timeout
的本地副本(通过单个读取操作)来避免您所强调的情况,因为类方法内部没有对其进行写入。虽然我在问题中没有表述清楚,但我理解锁定的概念。但至少其他读者将从您详细的答案中受益,所以谢谢您。 - miroxlav