Может ли быть гонка между двумя гиперпотоками на одном процессоре?
Я пытаюсь избежать состязаний в своем коде, и в настоящее время я работаю с одним гиперпоточным процессором, поэтому есть два логических процессора, каждый со своим собственным потоком. Если я правильно понимаю гиперпоточность, эти потоки используют одни и те же ресурсы, но их действия на самом деле срезаются по времени, а не одновременно. Возможно ли, чтобы между этими двумя гиперпотоками возникли условия гонки?
Например, есть ли причина для меня изменить это:
Connection& connection = connections[num_connections];
... do some stuff
++num_connections;
к этому:
Connection& connection = connections[num_connections++];
... do some stuff
2 ответа
Возможно.
Если оба потока выполняют логику
if(condition){
donate1MillionDollars
condition=false
}
даже с разделением времени два потока могут войти в блок if, и вы станете намного беднее, чем ожидалось:)
Не зная, что подразумевается под "делать что-то", трудно ответить конкретно для вашего варианта использования.
Поскольку вы не можете контролировать порядок событий между потоками или когда поток будет прерван, условия гонки могут вызвать сбои.
Сбои, вызванные состоянием гонки, не требуют одновременного выполнения.