9

由于 GUID 生成是时间相关的,如果 System.Guid.NewGuid() 在不同线程的同一时刻被多次调用,它会返回相同的 GUID 吗?

4

4 回答 4

7

在 Windows 上,GUID (UUID) 是使用UuidCreate从加密随机数生成器创建的。根据RFC 4122,它们是版本 4 UUID 。不涉及时间戳或以太网卡,除非您使用的是使用UuidCreateSequential创建的旧学校版本 1 GUID 。

另请参阅System.Guid.NewGuid() 有多随机?(拿两个)

于 2010-06-10T01:54:39.010 回答
5

不,它里面有一个序列号,每次调用都会改变,所以同一系统上不同线程上的多个同时调用不会创建重复的 Guid。

这并不意味着 Guid 有一个可见部分,您可以看到每次调用的增量。

于 2010-06-09T08:31:30.763 回答
0

Transact-SQL NEWID 函数和应用程序 API 函数和方法根据其网卡的标识号加上 CPU 时钟的唯一编号生成新的 uniqueidentifier 值。每个网卡都有一个唯一的标识号。NEWID 返回的 uniqueidentifier 值是使用服务器上的网卡生成的。应用API函数和方法返回的uniqueidentifier值是使用客户端的网卡生成的。

.它不会根据msdn及时或在任何 pc 中生成重复。

于 2010-06-09T08:36:01.903 回答
0

除非您的线程在机器上的不同内核上运行,否则在给定时间实际上只有一个线程在运行。因此,我认为对 NewGuid() 的调用不太可能同时发生。

于 2010-06-09T09:39:43.713 回答