1

c++11 では、クラス内の静的メンバー変数はスレッド境界を越えて適切に機能しますか? DLL の境界はどうですか?

これは、私が尋ねる原因となるクラスの大まかなカットです。

class IndexedEvent
{
public:
    //constructor that is used the very first time an 
    //instance of this class is constructed
    IndexedEvent(Event* ev, int res):point(ev),resolution(res){calculateIndex();}
    //constructor to be used every time after that
    IndexedEvent(Event* ev):point(ev){calculateIndex();}
    ...some more member functions...
private:
    ...some more member functions...

    static int resolution;
    Event* point;
    Index calcIndex;
}

プログラム実行の最初に解決を設定した場合、他のスレッドは、この値が正しく設定されたこの IndexedEvent のインスタンスを作成できますか? インポートされた dll の関数は、解像度が正しく設定されたインスタンスを作成できますか?

それが機能しない場合、またはジャンプする必要があるフープが原因で実行できない場合は、IndexedEvent のファクトリ クラスを作成し、演算子 new を介してこのクラスの新しいインスタンスを作成する代わりに、呼び出しでそれらを作成することで解決できますか?ファクトリークラスに?

4

1 に答える 1

1

静的変数は、すべてのスレッドで同じアドレスになります。

静的変数を DLL 内の静的関数に入れることをお勧めします。static 関数は、静的変数への参照を返します。このようにして、その初期化を制御でき、他のモジュールが簡単にアクセスできます。

thread_localスレッドごとに変数のローカル ストレージを保持するために使用します。

于 2013-08-16T20:35:07.177 に答える