У меня есть функция foo
, которая берет указатель на память как аргумент и записывает и читает в эту память:
cdef void foo (double *data):
data[some_index_int] = some_value_double
do_something_dependent_on (data)
Я выделяю data
так:
cdef int N = some_int
cdef double *data = <double*> malloc (N * sizeof (double))
cdef int i
for i in cython.parallel.prange (N, nogil=True):
foo (data)
readout (data)
Теперь мой вопрос: как разные темы рассматривают это? Я предполагаю, что память, на которую указывает data
, будет разделяться всеми потоками и "одновременно" читать или записывать, находясь внутри функции foo
. Это могло бы испортить все результаты, поскольку нельзя полагаться на ранее установленную дату-дату (в пределах foo
)? Является ли мое предположение правильным или есть какой-то волшебный защитный пояс, реализованный в компиляторе cython?
Спасибо вам заблаговременно.