在一个C++源文件,我包裹在一个Python函数,有人已经包括了以下内容:CPython中的静态全局变量是否不安全?
namespace some_namespace
{
static double some_double;
}
float function_that_uses_some_double(float input) {
// implementation
return result;
}
的静态全局some_double
是永远只能在函数内部使用的,所以如果我把这个包在CPython的函数并在单线程代码中调用它,该变量一次只能由一个函数使用。这很丑陋,但没有问题。我的问题是,如果我使用会发生什么:
- 的
threading
模块,或 - 的
multiprocessing
模块。
当我有多个进程和/或线程使用这个模块时,它们会互相干扰吗?
这不是问题。这个函数只能从CPython中调用(它的臭名昭着的GIL)可能会改变很多。而且你也没有解决多处理问题。 – delnan
我认为,如果你的线程的创建是在Python,后者又调用您的CPython的函数,则锁定(通过GIL)为您被Python自动完成。但是如果你在你的C++代码中创建线程,你必须自己获取,锁定和释放GIL。对不起,我不熟悉Python多处理模块。 –
线程只能在python中创建。不过,它们中的每一个都可能调用这个函数。 – Shep