2016-06-29 8 views
0

Я пытаюсь избежать условий гонки в своем коде, и в настоящее время я работаю с одним гиперпотоковым процессором, поэтому есть два логических процессора, каждый со своим потоком. Если мое понимание гиперпотока правильное, эти потоки разделяют одни и те же ресурсы, но их действия на самом деле ограничены по времени, а не одновременно. Возможно ли, что условия гонки могут возникнуть между этими двумя гиперпотоками?Может ли быть гонка между двумя гиперпотоками на одном процессоре?

Например, есть причина для меня, чтобы изменить это:

Connection& connection = connections[num_connections]; 
... do some stuff 
++num_connections; 

к этому:

Connection& connection = connections[num_connections++]; 
... do some stuff 
+1

a) Различие между гиперпотоками и потоками скрыто от среды потоковой передачи. b) Ни одна из кодовых конструкций не является потокобезопасной. Вам нужно будет больше исследований. –

+1

Нарезка времени - это все, что требуется для гонок. Не существует возможной гонки, которая не воспроизводится с временным разрезом на одноядерном процессоре. – usr

+1

@usr Не отвлекать от самого вопроса, но верно ли это для систем с расслабленной моделью памяти? Я бы подумал, что временное разрезание unicore может эмулировать последовательную согласованность в многоядерной системе. Я не вижу, как он может эмулировать условия гонки, которые могут быть вызваны переупорядочением памяти. Возвращаясь к вопросу, я не знаю, говорит ли Intel что-либо о переупорядочении памяти между гиперпотоками в одном ядре. Но, очевидно, программист должен принять наихудший вариант. – Mysticial

ответ

1

Это возможно.

Если оба потока выполняют логику как

if(condition){ 
donate1MillionDollars 
condition=false 
} 

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

Не зная, что " сделать некоторые вещи ", означает, что трудно ответить конкретно для вашего случая использования.

1

Поскольку вы не можете контролировать порядок событий между потоками или когда поток будет выгружен, конечно, условия гонки могут привести к сбоям.

Неисправности, вызванные расой, не требуют одновременного выполнения.