Это могло вызвать несколько идентичных GUID?

Поскольку поколение GUID является зависящим от времени, если Система. Гуид. NewGuid () называют многократно в тот же самый момент на различных потоках, он мог возвратить идентичные GUID?

8
задан billybum 9 June 2010 в 08:29
поделиться

4 ответа

В Windows GUID (UUID) создается с помощью криптографического генератора случайных чисел с помощью UuidCreate . Это UUID версии 4 согласно RFC 4122 . Никакие временные метки или карты Ethernet не задействованы, если только вы не используете GUID старой школы версии 1, созданный с помощью UuidCreateSequential .

См. Также Насколько случайным является System.Guid.NewGuid ()? (Возьмите два)

7
ответ дан 5 December 2019 в 14:00
поделиться

Нет, внутри него находится серийный номер, который меняется при каждом вызове, поэтому несколько одновременных вызовов в разных потоках на одной системе не создадут дубликаты Guid.

Это не означает, что есть видимая часть Guid, которая может быть увеличена для каждого вызова.

5
ответ дан 5 December 2019 в 14:00
поделиться

Функция NEWID Transact-SQL, а также функции и методы прикладного API генерируют новые значения уникального идентификатора на основе идентификационного номера своей сетевой карты и уникального номера на основе часов ЦП. Каждая сетевая карта имеет уникальный идентификационный номер. Значение uniqueidentifier, возвращаемое NEWID, генерируется с помощью сетевой карты на сервере. Значение uniqueidentifier, возвращаемое функциями и методами API приложения, создается с помощью сетевой карты на клиенте.

. Он не будет генерировать дубликаты во времени или на любом компьютере согласно msdn .

0
ответ дан 5 December 2019 в 14:00
поделиться

Если ваши потоки не работают на разных ядрах вашей машины, только один поток будет фактически работать в данный момент времени. Следовательно, я не думаю, что вызовы NewGuid () будут выполняться в одно и то же время.

0
ответ дан 5 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: