GUID の生成は時間に依存するため、異なるスレッドでまったく同じ瞬間に System.Guid.NewGuid() が複数回呼び出された場合、同じ GUID が返される可能性がありますか?
4 に答える
Windows では、 UuidCreateを使用して暗号乱数ジェネレーターから GUID (UUID) が作成されます。これらは、 RFC 4122に基づくバージョン 4 の UUIDです。UuidCreateSequentialで作成された古い学校のバージョン 1 GUID を使用していない限り、タイムスタンプやイーサネット カードは関係ありません。
いいえ、その中には呼び出しごとに変わるシリアル番号があるため、同じシステム上の異なるスレッドで複数の同時呼び出しを行っても、重複するGuidは作成されません。
これは、各呼び出しの増分を確認できるGuidの表示部分があることを意味するものではありません。
Transact-SQLのNEWID関数とアプリケーションAPIの関数とメソッドは、ネットワークカードの識別番号とCPUクロックの一意の番号から新しい一意の識別子の値を生成します。各ネットワークカードには一意の識別番号があります。NEWIDによって返されるuniqueidentifier値は、サーバー上のネットワークカードを使用して生成されます。アプリケーションAPIの関数とメソッドによって返されるuniqueidentifier値は、クライアントのネットワークカードを使用して生成されます。
.msdnに従って、時間内または任意のPCで重複を生成しません。
スレッドがマシンの異なるコアで実行されていない限り、実際に実行されるスレッドは一度に 1 つだけです。したがって、NewGuid() の呼び出しがまったく同時に行われる可能性は非常に低いと思います。