Han*_*ant 56
获得一个独特的32位ID非常简单:下一个.工作40亿次.如果您需要一秒钟,独特的136年.魔鬼在细节上:前一个是什么?您需要一种可靠的方法来持久保存最后使用的值和一种原子方式来更新它.
这将有多难取决于ID的范围.如果它是一个进程中的一个线程,那么您只需要一个文件.如果在一个进程中它是多个线程,那么您需要一个文件和一个互斥锁.如果一台机器上有多个进程,那么您需要一个文件和一个命名的互斥锁.如果它是多台计算机上的多个进程,那么您需要分配一个权威ID提供程序,即所有计算机都与之通信的单个服务器.数据库引擎是这样的通用提供程序,它们具有内置的功能,自动增量列.
随着范围扩大,获取ID的费用逐渐增加.当它变得不切实际,范围是Internet或提供程序太慢或不可用时,您需要放弃32位值.切换到随机值.一个随机足以使机器被流星撞击的可能性比重复相同的ID至少高出一百万倍.一个goo-ID.它只有4倍大.
jal*_*alf 11
这是我能想到的最简单的ID.
MyObject obj;
uint32_t id = reinterpret_cast<uint32_t>(&obj);
Run Code Online (Sandbox Code Playgroud)
在任何给定时间,此ID在整个应用程序中都是唯一的.没有其他对象位于同一地址.当然,如果重新启动应用程序,可能会为该对象分配一个新ID.一旦对象的生命周期结束,可以为另一个对象分配相同的ID.
并且可以为不同存储空间(例如,在不同计算机上)中的对象分配相同的ID.
最后但并非最不重要的是,如果指针大小大于32位,则映射将不是唯一的.
但是既然我们对你想要什么样的ID以及它应该是多么独特一无所知,这似乎是一个很好的答案.
归档时间: |
|
查看次数: |
63150 次 |
最近记录: |