Я пытаюсь избежать условий гонки в своем коде, и в настоящее время я работаю с одним гиперпотоковым процессором, поэтому есть два логических процессора, каждый со своим потоком. Если мое понимание гиперпотока правильное, эти потоки разделяют одни и те же ресурсы, но их действия на самом деле ограничены по времени, а не одновременно. Возможно ли, что условия гонки могут возникнуть между этими двумя гиперпотоками?Может ли быть гонка между двумя гиперпотоками на одном процессоре?
Например, есть причина для меня, чтобы изменить это:
Connection& connection = connections[num_connections];
... do some stuff
++num_connections;
к этому:
Connection& connection = connections[num_connections++];
... do some stuff
a) Различие между гиперпотоками и потоками скрыто от среды потоковой передачи. b) Ни одна из кодовых конструкций не является потокобезопасной. Вам нужно будет больше исследований. –
Нарезка времени - это все, что требуется для гонок. Не существует возможной гонки, которая не воспроизводится с временным разрезом на одноядерном процессоре. – usr
@usr Не отвлекать от самого вопроса, но верно ли это для систем с расслабленной моделью памяти? Я бы подумал, что временное разрезание unicore может эмулировать последовательную согласованность в многоядерной системе. Я не вижу, как он может эмулировать условия гонки, которые могут быть вызваны переупорядочением памяти. Возвращаясь к вопросу, я не знаю, говорит ли Intel что-либо о переупорядочении памяти между гиперпотоками в одном ядре. Но, очевидно, программист должен принять наихудший вариант. – Mysticial