必须"私人只读int"在多线程App中使用时是否是线程安全的?

时间:2018-06-05 13:51:35

标签: c# multithreading readonly

在我的多线程App中,我有一个包含private readonly实例变量的类,该变量在构造函数中由随机数初始化。

class MyClass
{
  private readonly int randomNumber;


  public MyClass()
  {
    randomNumber = new Random().Next();
  }

  // Is called by different threads
  public int getRandomNumber()
  {
   return randomNumber;
  }
}

在应用程序getRandomNumber()中由多个线程调用。我必须对螺纹安全采取任何预防措施吗?

作为一个后续问题:当我将变量设为静态并在声明中对其进行初始化时,我的威胁安全问题会发生什么变化呢?

class MyClass
{
  private static readonly int randomNumber = new Random().Next();

  ...
}

2 个答案:

答案 0 :(得分:1)

只有在读取和写入的情况下才需要注意事项,但由于您的变量是只读的,我认为在任何情况下都不需要任何预防措施,无论是多线程还是单线程。

答案 1 :(得分:0)

是的 - 在完全构建之前,没有其他代码可以看到该对象。

注意:

  1. 如果我们执行构造函数链接,我们需要注意。
  2. 此外,它取决于类型,例如对于字典为只读,我们可以执行某些键值操作