2011-07-08 19 views
1

シングルトンのインスタンスを作成する際の競合条件に関するシングルトンとスレッドセーフティの問題については、どのスレッドについて話していますか?シングルトンとスレッドの安全性

  • 私は一度MYAPP.EXEを開き、 その後、もう一度:例として、これを使用して

    は、それは話している私はシングルトン

    class MyApp 
    { 
        MySingleton oneAndOnly; 
    
        int main() // application entry point 
        { 
         oneAndOnly = MySingleton::GetInstance(); 
        } 
    
        void SpawnThreads() 
        { 
         for(int i = 0; i < 100; i++) 
         { 
           Thread spawn = new Thread(new ThreadStart(JustDoIt)); 
           spawn.Start(); 
         } 
        } 
    
        void JustDoIt() 
        { 
         WaitRandomAmountOfTime(); // Wait to induce race condition (maybe?) for next line. 
    
         MySingleton localInstance = MySingleton::GetInstance(); 
         localInstance.DoSomething(); 
        } 
    } 
    

    を使用するのMyAppを持っていると仮定します再び、 を開こうとしていますか?

  • これは、MyAppによって生成されたスレッドに関するものですか? MyAppが スレッドを生成しない場合はどうなりますか?

答えて

1

Windows threads exist solely within the scope of a processでは、アプリケーションの実行中のインスタンスです。したがってthread safetyは、の複数のスレッドから共有リソースが順次アクセスされるようにすることを意味します。

より一般的に言えば、範囲にかかわらず、同時性の結果として競合状態が発生します。たとえば、共有リソースを外部プロセスに公開する分散アプリケーションの場合、そのリソースへのアクセスが適切に規制されていなければ、引き続き競合状態になる可能性があります。

関連する問題