从线程外部访问ThreadStatic -变量

本文关键字:变量 ThreadStatic 访问 线程 外部 | 更新日期: 2023-09-27 18:07:14

我已经定义了一个变量为ThreadStatic:

public static class MyApplicationContext {
    [ThreadStatic]
    public static bool Monitoring;
}

现在,我应该从主线程(它已经启动了新线程)设置变量Monitoring:

this.syncThread = new Thread(this.InternalWork);
this.syncThread.SetApartmentState(ApartmentState.STA);
this.syncThread.Start();
// now, I should access MyApplicationContext.Monitoring of syncThread.

有办法做到这一点吗?

从线程外部访问ThreadStatic -变量

我的理解是ThreadStatic总是相对于线程的。如果您指示线程为您读取is,则可以获得此信息。

您还可以将静态值设置为对象,然后让该线程将引用添加到要监视的中心位置。您仍然需要确保对该对象的更改定期同步或将其设置为volatile。

通过手动同步或将其设置为volatile,您删除了它作为线程本地的许多好处。如果ThreadStatic对象是一个可能改变的数据结构,您还需要小心。当你的主线程试图读取一个改变的数据结构时,可能会抛出异常,或者更糟,返回错误的数据。

我没有ThreadStatic的经验,所以我只基于我的知识。