在多线程App中使用必须"private readonly int"是线程安全的吗?
Must "private readonly int" be thread safe when used in multi-thread App?
在我的多线程应用程序中,我有一个 class 包含一个 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();
...
}
只有读和写都需要注意,但是由于你的变量是只读的,我认为无论是多线程还是单线程,都不需要任何预防措施。
是 - 在对象完全构建之前,其他代码无法看到该对象。
注:
- 我们需要小心以防执行构造函数链接。
- 此外,这取决于类型,例如对于只读的字典,我们可以执行某些键值操作
在我的多线程应用程序中,我有一个 class 包含一个 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();
...
}
只有读和写都需要注意,但是由于你的变量是只读的,我认为无论是多线程还是单线程,都不需要任何预防措施。
是 - 在对象完全构建之前,其他代码无法看到该对象。
注:
- 我们需要小心以防执行构造函数链接。
- 此外,这取决于类型,例如对于只读的字典,我们可以执行某些键值操作