在 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/