2016-09-12 18 views
-1

私はスレッドセーフでユニークなID生成をC++アプリケーションライフで探していたので、次の静的クラスを作成しました。スレッドセーフ固有のIDの生成をC++で

class Utils { 
public : 
    static int getUid(); 
}; 

int Utils::getUid() { 
    static std::atomic<std::uint32_t> uid; 
    uid = 0; 
    return ++uid; 
} 

これは正しいアプローチです。

+0

あなたはそれが唯一の '1'を返します気づいたかもしれません。 – LogicStuff

+0

まだテストされていませんが、いくつかのサンプルコードで確認します。物事を終わらせるための他のアプローチ。 – Sachin

+0

すべての呼び出しで 'uid = 0'がリセットされます。 – user4407569

答えて

1

は、このようにそれを修正する:

class Utils { 
public : 
    static int getUid(); 
}; 

int Utils::getUid() { 
    static std::atomic<std::uint32_t> uid { 0 }; // <<== initialised 
// uid = 0; <<== removed 
    return ++uid; 
} 
+0

ありがとうございます。これは機能します。実際には静的変数を初期化する必要があります。 – Sachin

+0

@Sachinはい、しています。これはスレッドセーフな方法で値を与える唯一の方法です。必要に応じて、関数で初期化することもできますが、後続の操作ではなく、初期化として行う必要があります。 –

+0

ありがとうございます。理解しています。 – Sachin

関連する問題