3

シングルトンとスレッドセーフに関する質問はたくさん見つかりましたが、この質問に完全に答えたものはありませんでした...しかし、繰り返しの場合はお詫び申し上げます。

複数のスレッドで使用されるシングルトンオブジェクトがある場合、メンバー変数への変更は慎重に検討する必要があることを理解していますが、メソッドに対してローカルな変数についてはどうでしょうか。

この疑似コードを考えてみましょう。

class Singleton  [assume this has all the trappings of a proper singleton]
{
    int doSomething() {
        SomeObject obj;
        obj.doStuff();
        return obj.result();
    }

}

この場合、ローカルの「obj」スレッドは安全ですか?シングルトンクラスのオブジェクトが1つしかない場合でも、各スレッドは独自のコピーを取得しますか?

4

2 に答える 2

4

はい、objスレッドごとに一意です。

ただし、一般的なデータにアクセスして変更した場合(たとえば、グローバルのメンバーdoStuffまたはグローバルにresultアクセスした場合)、スレッドの問題が発生する可能性があります。staticSomeObject

于 2012-12-03T19:48:35.423 に答える
0

Luchianがこれまでのところ問題ないと言ったように、静的または任意の&または*変数がある場合は、ミューテックスロックまたはスピンロックを使用してみてください。ミューテックスロックとスピンロックはすべてのUNIXベースのシステムに存在し、ウィンドウでも使用できると思いますが、最初にそれらを何らかの方法で追加する必要があります。

pthreadミューテックスのリンクは次のとおりです。http ://www.thegeekstuff.com/2012/05/c-mutex-examples/

そして、ここにもう1つWindows用のものがあります:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686927 (v = vs.85).aspx

于 2012-12-03T21:55:35.530 に答える