在這裏回答我自己的問題,但在撥入NumPy 1.3.0的源代碼後,我相信答案是:是的,PyArray_DATA
是線程安全的。
PyArray_DATA
在 ndarrayobject.h定義:
#define PyArray_DATA(obj) ((void *)(((PyArrayObject *)(obj))->data))
的PyArrayObject結構類型是在同一個文件中定義 ;感興趣的領域 是:
char *data;
所以,現在的問題是,無論是從多個線程訪問data
安全與否。
從零開始創建一個新的NumPy數組(即,不從現有的數據結構派生它)將NULL
數據指針傳遞給arrayobject.c中定義的PyArray_NewFromDescr
。
這會導致PyArray_NewFromDescr
調用PyDataMem_NEW
以便爲PyArrayObject的data
字段分配內存。這是一個簡單的malloc的宏:
#define PyDataMem_NEW(size) ((char *)malloc(size))
綜上所述,PyArray_DATA
是線程安全的,只要與NumPy陣列單獨創建,它是安全的,從不同的線程寫信給他們。
來源
2010-12-05 11:30:37
ide