我正在尝试避免代码中的竞争条件,而且我目前正在使用单个超线程CPU,因此有两个逻辑CPU,每个都有自己的线程。如果我对超线程的理解是正确的,那么这些线程共享相同的资源,但它们的行为实际上是时间切片的,而不是并发的。在这两个超线程之间是否仍然可能出现竞争条件?
例如,我有理由改变这个:
Connection& connection = connections[num_connections];
... do some stuff
++num_connections;
到此:
Connection& connection = connections[num_connections++];
... do some stuff
答案 0 :(得分:1)
这是可能的。
如果两个线程都执行类似
的逻辑if(condition){
donate1MillionDollars
condition=false
}
即使有时间切片,两个线程也可以进入if块,并且你变得比预期更差:)
不知道“做某些事情”意味着什么,很难专门回答你的用例。
答案 1 :(得分:1)
由于您无法控制线程之间的事件顺序,或者线程被抢占,当然竞争条件可能会导致失败。
竞争条件生成的故障不需要同时执行。