同一个 CPU 上的两个超线程之间是否存在竞争?

Can there be a race between two hyperthreads on the same CPU?

我试图在我的代码中避免竞争条件,我目前正在使用单个超线程 CPU,因此有两个逻辑 CPU,每个都有自己的线程。如果我对超线程的理解是正确的,这些线程共享相同的资源,但它们的动作实际上是时间片的,而不是并发的。这两个超线程之间是否仍然可能出现竞争条件?

例如,我有理由改变这个吗:

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

对此:

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

有可能。

如果两个线程都执行类似

的逻辑
if(condition){
 donate1MillionDollars
 condition=false
}

即使有时间片,两个线程都可以进入if块,你变得比预期的要差很多:)

不知道 "do some stuff" 的含义,很难针对您的用例做出具体回答。

由于您无法控制线程之间事件的顺序,或者线程何时会被抢占,竞争条件当然会导致失败。

竞争条件生成的失败不需要同时执行。