Действительно ли rand_s Windows ориентирован на многопотоковое исполнение?

Нет разницы. И * всегда относится только к a.

Пример:

int *a= nullptr, b=12;   // a is a pointer, b is a plain int
int* a= nullptr, b=12;   // still a is a pointer and b an int, 
                         // despite misleading impression conveyed
13
задан Paweł Hajdan 27 September 2008 в 06:13
поделиться

5 ответов

Если Вы используете многопоточный версия CRT, все функции ориентированы на многопотоковое исполнение, потому что любая определенная для потока информация хранится в TLS. rand_s на самом деле не использует информацию состояния во-первых, так как это просто называет API ОС, таким образом, вопрос потокобезопасности не возникает для rand_s. рэнд (), однако зависит от значения семени для генерации случайного числа.

11
ответ дан 2 December 2019 в 00:32
поделиться

Chris сказал: rand() не ориентировано на многопотоковое исполнение, потому что его внутреннее состояние статично, но rand_s() должно быть ориентировано на многопотоковое исполнение, как бы то ни было.

Jeff добавил однако, что с многопоточной версией MSVCRT, rand() состояние сохранено в локальной памяти потока, таким образом, хорошо тихо.

3
ответ дан 2 December 2019 в 00:32
поделиться

Visual Studio идет с источником к библиотеке времени выполнения. В то время как часть его может быть довольно болезненной для прохождения через, rand_s () довольно просто.

Весь rand_s () делает назвать SystemFunction036 () в ADVAPI32.DLL для получения случайного значения. Что-либо в ADVAPI32.DLL должно быть ориентировано на многопотоковое исполнение.

Со своей стороны, rand_s () получает указатель на ту функцию ориентированным на многопотоковое исполнение способом.

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

Я не могу думать ни о какой причине, почему rand_s () или даже рэнд () не был бы ориентирован на многопотоковое исполнение.

-2
ответ дан 2 December 2019 в 00:32
поделиться

Я не знаю, ориентирован ли rand_s на многопотоковое исполнение, но кажется, что это, вероятно, так как это, кажется, делает распространение в прямом и обратном направлениях к ОС для энтропии. (как долго, поскольку Вы связываетесь с VC ++ CRT мультипотока, все ставки выключены при соединении с единственным потоком одного)

, Если он поддерживается окнами CRT, можно попробовать вызов к rand_r, который является posix повторно используемой версией рэнда. ИЛИ еще лучшее повышение:: случайный, если Вы уже используете повышение.

рассмотрение, как распространяющаяся многопоточность скоро будет, никто не должен использовать рэнд () больше в новом коде - всегда пытаются использовать rand_r/rand_s/boost/various зависимые от платформы безопасные рэнды/и т.д.

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

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