gpt4 book ai didi

c++ - CPython 中的静态全局变量不安全吗?

转载 作者:行者123 更新时间:2023-11-28 08:04:54 27 4
gpt4 key购买 nike

在我用 python 函数包装的一个 C++ 源文件中,有人包含了以下内容:

namespace some_namespace 
{
static double some_double;
}

float function_that_uses_some_double(float input) {
// implementation
return result;
}

静态全局 some_double 只在函数内部使用,所以如果我将它包装在 CPython 函数中并在单线程代码中调用它,该变量将只被一个函数使用一次。这很丑陋,但那里没有问题。我的问题是如果我使用会发生什么:

  1. threading 模块,或者
  2. 多处理 模块。

当我有多个进程和/或线程使用这个模块时,它们会互相干扰吗?

最佳答案

如果您使用线程模块,那么所有函数将简单地共享该全局变量。 python 中的线程在字节码边界之间切换,因此锁定不是问题。

如果你使用 multiprocessing 模块,情况就不同了,这在一定程度上取决于你对 multiprocessing 的使用。 Python 从单个进程开始,因此只有一个全局变量拷贝。当您开始使用多进程(即从主进程派生新的 Python 进程)时,该变量的值将被复制到子进程(任务)中,但这些进程将各自拥有自己的全局变量拷贝。

如果您变得狡猾并设置共享内存段(mmap 和 MAP_SHARED)并且变量是指针,那么指向的位置将被共享,您将需要使用锁定。

关于c++ - CPython 中的静态全局变量不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464626/

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