可以在同一个CPU上的两个超线程之间进行竞争吗?

时间:2016-06-29 14:59:15

标签: multithreading race-condition hyperthreading

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

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

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

到此:

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

2 个答案:

答案 0 :(得分:1)

这是可能的。

如果两个线程都执行类似

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

即使有时间切片,两个线程也可以进入if块,并且你变得比预期更差:)

不知道“做某些事情”意味着什么,很难专门回答你的用例。

答案 1 :(得分:1)

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

竞争条件生成的故障不需要同时执行。