在c+中生成线程安全的唯一id+; < >我在C++应用程序生命中寻找线程安全的唯一ID生成,所以我创建了以下静态类.< /p> class Utils { public : static int getUid(); }; int Utils::getUid() { static std::atomic<std::uint32_t> uid; uid = 0; return ++uid; } 类Utils{ 公众: 静态int getUid(); }; int-Utils::getUid(){ 静态std::原子uid; uid=0; 返回++uid; }

在c+中生成线程安全的唯一id+; < >我在C++应用程序生命中寻找线程安全的唯一ID生成,所以我创建了以下静态类.< /p> class Utils { public : static int getUid(); }; int Utils::getUid() { static std::atomic<std::uint32_t> uid; uid = 0; return ++uid; } 类Utils{ 公众: 静态int getUid(); }; int-Utils::getUid(){ 静态std::原子uid; uid=0; 返回++uid; },c++,c++11,C++,C++11,任何建议,都是正确的方法。这样解决: class Utils { public : static int getUid(); }; int Utils::getUid() { static std::atomic<std::uint32_t> uid { 0 }; // <<== initialised // uid = 0; <<== removed return ++uid; } 类Utils{ 公众: 静态int

任何建议,都是正确的方法。

这样解决:

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

int Utils::getUid() {
    static std::atomic<std::uint32_t> uid { 0 };  // <<== initialised
//    uid = 0;    <<== removed
    return ++uid;
}
类Utils{ 公众: 静态int getUid(); }; int-Utils::getUid(){
静态std::原子uid{0};//您可能已经注意到它只返回
1
。尚未测试,将使用一些示例代码进行检查。任何其他方法都可以完成。您每次调用时都不断重置
uid=0
,仅此而已。是的,谢谢。未初始化的静态变量设置为0。谢谢。这很有效。但是我们真的需要初始化静态变量吗e、 @Sachin是的,我们有。这是以线程安全的方式给它一个值的唯一方法。如果你愿意,你可以用一个函数初始化它,但它必须作为一个初始化来完成,而不是后续的操作。所以我可以假设它甚至是局部变量。它是线程安全的,因为原子。@Sachin初始化是线程安全的,因为它是静态的,c++11保证了静态初始化是线程安全的。后续访问将是线程安全的,因为它是原子的。