在一個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