如果我有以下伪代码:
sharedVariable = somevalue;
CreateThread(threadWhichUsesSharedVariable);
理论上,多核 CPU 是否可以在 threadWhichUsesSharedVariable() 中执行代码,该代码在父线程写入之前读取 sharedVariable 的值?为了在理论上完全避免竞争条件的可能性,代码应该看起来像这样:
sharedVariableMutex.lock();
sharedVariable = somevalue;
sharedVariableMutex.unlock();
CreateThread(threadWhichUsesSharedVariable);
基本上我想知道线程的产生是否在那时显式地线性化了 CPU,并保证这样做。
我知道线程创建的开销可能需要足够的时间,这在实践中并不重要,但我的完美主义者害怕理论上的竞争条件。在极端条件下,一些线程或内核可能严重滞后,而其他线程或内核运行得又快又高效,我可以想象,除非有锁,否则执行顺序(或内存访问)可能会被逆转。