我的问题与类函数的线程安全有关。这是我为了更好地理解而拼凑的一些测试代码。
public sealed class Singleton
{
public static Singleton Instance { get { return _lazyInit.Value; } }
private static readonly Lazy<Singleton> _lazyInit = new Lazy<Singleton> (() => new Singleton());
public long ExecuteAlgorithm(int n)
{
n += 2;
return new Algorithm().Fibonacci(n);
}
}
public class Algorithm
{
public long Fibonacci(int n)
{
long a = 0;
long b = 1;
for (long i = 0; i < n; i++)
{
long temp = a;
a = b;
b = temp + b;
}
return a;
}
}
类 Singleton 的创建是安全的,但我的问题是关于函数 ExecuteAlgorithm 的使用。多线程使用 ExecuteAlgorithm() 安全吗?
我的理解是,它应该不会导致任何竞争条件,因为创建的每个线程都有自己的堆栈,局部函数变量将被压入其中,然后算法实例的创建将在应用程序范围的堆中创建.
我的理解正确吗?
最佳答案
没错。 ExecuteAlgorithm()
无法访问共享状态,因此不可能出现线程问题。
但是 ExecuteAlgorithm()
也可能是静态的,至少就多线程安全而言是这样。 Fibonacci()
也是如此。
关于c# - 单例线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700791/