Я должен генерировать 19-битные случайные числа. Однако есть ограничение - два потока могут не генерировать одно и то же случайное число при выполнении определенного кода.
Самое простое решение - заблокировать весь код. Тем не менее, я хотел бы знать, есть ли неблокирующее решение. Я думал, что могу включить ManagedThreadId в производимые случайные числа, но в документации ManagedThreadId в Интернете упоминается, что он может охватывать весь диапазон Int32. Кажется, неуправляемый идентификатор потока ограничен 11 битами, но у меня остается только 8 действительно случайных битов.
Есть ли другие способы? Как-то использовать Thread Local Storage, может быть?
Спасибо.
EDIT
Я хочу кое-что прояснить. Случайные числа могут повторяться, это неизбежно, в конце концов. Чего я хочу избежать, так это если один кусок кода одновременно вводится двумя потоками, тогда эти потоки могут не использовать одно и то же случайное число, гарантировано. До или после выполнения этого кода - хорошо, но не в самом коде. Опять же, я могу использовать некоторую схему блокировки, чтобы предотвратить ее, но сначала я хочу изучить схемы без блокировки.
РЕДАКТИРОВАТЬ 2
Читая комментарии / ответы на мой вопрос, я понял, что не могу избежать, кроме как заблокировать конкретный код. Однако ради чисто академического любопытства мне все еще интересно знать, знает ли кто-нибудь хорошее решение моего первоначального вопроса - генерировать 19-битные случайные числа в нескольких потоках, где числа гарантированно различаются между потоками, учитывая, что ManagedThreadId может быть потенциально очень большим, настолько большим, что простое объединение его в случайное число является плохим - не оставляет места для реальных случайных битов.