c++ - 在 C++ 中生成唯一 ID 的算法?

标签 c++ uniqueidentifier

在 C++ 中生成唯一 ID 的最佳算法是什么? 长度 ID 应为 32 位无符号整数。

最佳答案

获得一个唯一的 32 位 ID 很简单:下一个。工作 40 亿次。 136 年独一无二,如果您需要一秒钟。魔鬼在细节中:前一个是什么?您需要一种可靠的方式来持久化上次使用的值,并需要一种原子方式来更新它。

具体难度取决于 ID 的范围。如果它是一个进程中的一个线程,那么您只需要一个文件。如果它是一个进程中的多个线程,那么您需要一个文件和一个互斥锁。如果一台机器上有多个进程,那么您需要一个文件和一个命名的互斥锁。如果它是多台机器上的多个进程,那么您需要分配一个权威的 ID 提供者,即所有机器都与之通信的单个服务器。数据库引擎就是这样一个常见的提供者,他们有这个内置的特性,一个自动增量列。

随着范围的扩大,获取 ID 的费用会逐渐增加。当它变得不切实际时,范围是 Internet 或提供商太慢或不可用,那么您需要放弃 32 位值。切换到随机值。随机性足以使机器被 meteor 击中的可能性比重复相同 ID 的可能性至少高一百万倍。一个好ID。它只有 4 倍大。

关于c++ - 在 C++ 中生成唯一 ID 的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1988679/

相关文章:

c++ - 有什么明确的解释吗?

c++ - OpenCV中是否有任何函数可以找到两个cv::Rect的交集、并集和补集

android - 如何在 Superpowered SDK 中并行应用过滤器

algorithm - 如何创建唯一的订单号

git - Git 存储库中文件的唯一标识符

c++ - C++中new的使用

c++ - 提升asio async_read : the read message adds to itself

sql-server - SQL Server 中的 guid 实际上是如何存储和排序/比较的?

c#.NET USB 设备持久标识符

ios - 手动更改 $(AppIdentifierPrefix) 属性?