【发布时间】:2014-11-06 12:12:00
【问题描述】:
在众所周知的Joseph Albahari's article on Threading中,多个线程使用的所有类变量都声明为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,并且我使用工具对其进行了转换。我希望主要问题仍然清楚。
【问题讨论】:
标签: .net multithreading static shared