是一个类范围的整数,仅在开始时分配,以便线程安全地读取其值

本文关键字:分配 线程 开始时 安全 读取 一个 整数 范围 | 更新日期: 2023-09-27 18:14:36

如果我在程序开始时分配了一个变量,然后程序创建了几个线程,然后引用它,它是线程安全的吗?

private int myVal
private void StartOfApp()
{
  myVal = 99;
}
private void MethodCalledFromVariousThreads()
{
  int i = 100;
  if (i > myVal)  //Is reading this variable thread safe?
  {   
    //Do Stuff
  }
}

}

是一个类范围的整数,仅在开始时分配,以便线程安全地读取其值

只要你能保证StartOfAppMethodCalled之前完成任务就可以了。

我觉得这样更好:

private const int myVal = 99;
private void MethodCalledFromVariousThreads()
{
  int i = 100;
  if (i > myVal)  //Is reading this variable thread safe?
  {
    //Do Stuff
  }
} 

是的,这是线程安全的。因为您从未写入变量(我假设),它的数据本质上是不可变的。(好吧,它确实是可变的,因为这是c#,但你懂的)因此,它将始终返回相同的值,因此可以安全地读取。

如果你从不写一个变量,除非在创建它的时候,那么它将永远是线程安全的。