mar*_*ark 20 .net multithreading guid
如果进程中的两个线程使用.NET API(Guid.NewGuid())同时生成新的GUID ,那么两个GUID可能是相同的吗?
谢谢.
更新 我希望变得实用.我知道人们普遍认为GUID在所有实际用途中都是独一无二的.我想知道我是否可以以相同的方式处理由同一进程的不同线程生成的GUIDS.
Dan*_*Tao 30
可能(在宇宙的生命周期中,可能发生过吗?)是.
可能(根本)?没有.
Microsoft使用版本4算法生成GUID(另请参见:此处),该算法生成完全(伪)随机数.
鉴于可能的GUID数量,重复的概率很小.就像,不可思议的微小.
您关注的是并发性:幸运的NewGuid是,该方法是线程安全的,这意味着它可以锁定或利用线程静态随机数生成器来实现其目的.第一种方法将有效地序列化所有调用,NewGuid以便它们按顺序发生(从不同时发生),而后者将从彼此独立的线程进行调用.
在任何一种情况下,你不得不担心从两个线程同时创建随机数的重复项的唯一原因 - GUID或者不是 - 如果线程使用的基础生成器是从同一种子运行(1)来自设计缺陷的结果),以及(2)以时间依赖的方式(版本4 GUID算法没有).
所以是的,实际上,您可以将从单独线程同时生成的GUID视为唯一.