我无法找到关于这个确切话题的任何信息,如果已经有相关问题,请引导我走向正确的方向。
根据我所了解的.NET,无法跨不同线程访问变量(如果我的说法不正确,请纠正我,这只是我在某处读到的)。
然而,在这个代码示例中,它似乎应该不能正常工作:
class MyClass
{
public int variable;
internal MyClass()
{
Thread thread = new Thread(new ThreadStart(DoSomething));
thread.IsBackground = true;
thread.Start();
}
public void DoSomething()
{
variable = 0;
for (int i = 0; i < 10; i++)
variable++;
MessageBox.Show(variable.ToString());
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SomeMethod();
{
MyClass mc = new MyClass();
}
}
当我运行SomeMethod()
时,.NET是否应该抛出异常?因为创建的对象mc
正在与在mc
初始化器中创建的线程不同的线程中运行,并且这个新线程正在尝试访问mc
的局部变量。
MessageBox
显示10
,这并不是预期的结果,但我不确定为什么会起作用。也许我不知道该搜索什么,但我找到的与线程相关的话题都没有解决这个问题,也许我的变量和线程的理解有误。
ThreadStatic
(以及更新的ThreadLocal
)真的需要“对多线程和处理器优化有深入的理解”吗?它们两个都让我感觉相对简单(尽管使用实例字段显然更简单)。我承认有一些陷阱(特别是在ThreadStatic
方面),但没有什么过分的地方。 - Brian