boost :: uuids :: random_generator线程安全吗?

Vah*_*agn 6 c++ boost-random boost-uuid c++11 gcc4.7

考虑使用g++ -std=c++11(GCC 4.7.2)编译此函数:

boost::uuids::uuid getID()
{
    static boost::uuids::random_generator generator;
    return generator();
}
Run Code Online (Sandbox Code Playgroud)

getID从多个线程调用安全吗?

正如提到这里的局部静态对象定义在所述第一线是根据C ++ 11标准线程安全的。问题是,第二行boost::uuids::random_generator::operator()对同一对象的调用generator是否也是线程安全的。返回的UUID在单个线程中是否唯一?

小智 4

根据这个主题,随机生成器不是完全线程安全的。我尝试以类似于您的实现的方式使用此类。我每隔几个小时就会崩溃一次,生成器有时会返回“零”uuid,例如 0000-0000-000 - 你明白了。尽管没有记录,但我认为该类不是线程安全的。您必须在每次生成 uuid 时创建一个生成器实例,或者可以使用互斥体使对 getID() 的调用线程安全,或者您可以为每个线程创建一个 uuid 生成器实例。所有选项都应该可以正常工作。

  • 据我所知,每次需要新的 uuid 时创建 uuid 生成器的实例是一个错误的建议。 (6认同)