Собираюсь распараллелить часть своего кода, отвечающего за равномерное распределение случайно распределенных точек в объеме силами отталкивания.
В общей памяти будут содержаться координаты точек, заданные одномерными массивами, тип ячеек:
float64
.В рамках программы устаревание данных не интересует, а разные ядра процессора не могут производить запись в одинаковые ячейки, но считывать могут все ячейки.
И вот здесь вопрос. Могут ли 2 разных ядра процессора одновременно производить и чтение, и запись числа из ОДНОЙ ОДИНАКОВОЙ ячейки матрицы в общей памяти? Т.е. может ли случиться так, что какое-то ядро прочитает не полностью записанное число, если такая запись вообще возможна? Или же два ядра встанут в очередь даже без явного её указания, обращаясь к одинаковой ячейке?
Вырезка кода задания общей памяти из другого моего кода (случай отличается, но принцип тот же):
Код: Выделить всё
import numpy as np
from multiprocessing import Process
from multiprocessing import shared_memory
if __name__ == '__main__':
a=np.zeros((2, 12)) #вид матрицы памяти
shm=shared_memory.SharedMemory(create=True, size=a.nbytes) #размер общей памяти
b=np.ndarray(a.shape, dtype=a.dtype, buffer=shm.buf) #матрица, имеющая доступ в общую память
b[:] = a[:] # заполнение общей памяти начальными данными