random.seed (): Что это делает?

Это зависит.

Язык C ++ ничего не говорит о потоках или атомарности.

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

Однако, без мьютекса или какой-либо другой формы синхронизации, компилятор и процессор могут свободно изменять порядок чтения и записи, поэтому все, что связано с доступом к нескольким переменным, по-прежнему небезопасно в общем случае.

Предполагая, что поток писателя обновляет некоторые данные, а затем устанавливает флаг целого, чтобы информировать другие потоки о том, что данные доступны, это может переупорядочиваться, поэтому флаг перед обновляет данные. Если вы не используете мьютекс или другую форму барьера памяти.

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

152
задан Aditya Gupta 18 December 2018 в 08:56
поделиться