在我的多线程应用程序中,我有一个包含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();
...
}
只有在同时读取和写入的情况下才需要预防措施,但由于您的变量是只读的,我认为在任何情况下都不需要任何预防措施,无论是多线程还是单线程。
是的- 在完全构造对象之前,没有其他代码可以看到该对象。
注意:
- 我们需要小心,以防我们执行构造函数链接。
- 此外,这取决于类型,例如对于只读字典,我们被允许执行某些键值操作