【发布时间】:2011-03-01 13:19:38
【问题描述】:
由于 GUID 的生成是时间相关的,如果 System.Guid.NewGuid() 在不同线程的同一时刻被多次调用,它是否会返回相同的 GUID?
【问题讨论】:
由于 GUID 的生成是时间相关的,如果 System.Guid.NewGuid() 在不同线程的同一时刻被多次调用,它是否会返回相同的 GUID?
【问题讨论】:
在 Windows 上,GUID (UUID) 是从带有 UuidCreate 的加密随机数生成器创建的。就RFC 4122 而言,它们是版本4 UUID。不涉及时间戳或以太网卡,除非您使用的是使用 UuidCreateSequential 创建的旧式版本 1 GUID。
【讨论】:
不,它里面有一个序列号,每次调用都会改变,所以同一系统上不同线程上的多个同时调用不会创建重复的 Guid。
这并不意味着 Guid 有一个可见部分,您可以看到每次调用的增量。
【讨论】:
Transact-SQL NEWID 函数和应用程序 API 函数和方法根据其网卡的标识号加上 CPU 时钟的唯一编号生成新的 uniqueidentifier 值。每个网卡都有一个唯一的标识号。 NEWID 返回的 uniqueidentifier 值是使用服务器上的网卡生成的。应用API函数和方法返回的uniqueidentifier值是在客户端使用网卡生成的。
.它不会根据msdn及时或在任何电脑中生成重复。
【讨论】:
除非您的线程在您机器上的不同内核上运行,否则在给定时间实际上只有一个线程在运行。因此,我认为对 NewGuid() 的调用不太可能同时发生。
【讨论】: