3

私の質問は、クラス関数のスレッド セーフに関するものです。これは、理解を深めるためにまとめたテスト コードです。

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() の使用は安全ですか?

私の理解では、作成された各スレッドには、ローカル関数変数がプッシュされる独自のスタックがあり、Algorithm インスタンスの作成は、アプリケーション全体のヒープに作成されるため、競合状態を引き起こさないようにする必要があります。

私の理解は正しいですか?

4

1 に答える 1