gpt4 book ai didi

multithreading - 在生成访问它的子线程之前,是否应该由父线程锁定对共享资源的访问?

转载 作者:行者123 更新时间:2023-12-04 06:37:18 24 4
gpt4 key购买 nike

如果我有以下伪代码:

sharedVariable = somevalue;
CreateThread(threadWhichUsesSharedVariable);

理论上多核 CPU 是否可以在 threadWhichUsesSharedVariable() 中执行代码,在父线程写入之前读取 sharedVariable 的值?为了在理论上完全避免竞争条件的可能性,甚至是极小的可能性,代码应该如下所示:

sharedVariableMutex.lock();
sharedVariable = somevalue;
sharedVariableMutex.unlock();
CreateThread(threadWhichUsesSharedVariable);

基本上我想知道线程的生成是否明确地线性化了 CPU 在那个点上,并且保证这样做。

我知道线程创建的开销可能需要足够的时间,这在实践中无关紧要,但我这个完美主义者害怕理论上的竞争条件。在极端条件下,一些线程或核心可能严重滞后,而其他线程或核心运行快速高效,我可以想象除非有锁,否则执行顺序(或内存访问)可能会被逆转。

最佳答案

我会说你的伪代码在任何正确运行的情况下都是安全的多处理器系统。 C++ 编译器无法生成对CreateThread()sharedVariable 收到正确值之前除非它能向自己证明这样做是安全的。你被保证你的单线程代码等同于完全执行非重新排序的线性执行路径。任何“时间扭曲”的系统变量赋值之前的线程创建被严重破坏。

我不认为将 sharedVariable 声明为 volatile 有任何作用在这种情况下很有用。

关于multithreading - 在生成访问它的子线程之前,是否应该由父线程锁定对共享资源的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com