同一个 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" 的含义,很难针对您的用例做出具体回答。
由于您无法控制线程之间事件的顺序,或者线程何时会被抢占,竞争条件当然会导致失败。
竞争条件生成的失败不需要同时执行。
我试图在我的代码中避免竞争条件,我目前正在使用单个超线程 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" 的含义,很难针对您的用例做出具体回答。
由于您无法控制线程之间事件的顺序,或者线程何时会被抢占,竞争条件当然会导致失败。
竞争条件生成的失败不需要同时执行。