Это прекрасно работает в Linux. Я могу передавать данные между двумя процессами, как и ожидалось, с помощью shm.
Однако, когда точно такой же код выполняется в MacOS, хотя он и работает без ошибок, общая память при чтении всегда полна нулей. от другого процесса к тому, который заполнил память. например если я записываю данные изображения в shm из C и читаю их из Python, все это равно нулю. Если я записываю данные изображения в shm из Python и читаю их из C, снова все равно нулю.
Я создаю shm в C следующим образом: (некоторые строки обработки ошибок удалены для ясности)
Код: Выделить всё
void *shm_ptr = NULL;
snprintf(shm_name_ptr, 30, "/%08x%08x%08x%04x", my_random_int(), my_random_int(), my_random_int(), my_random_int());
debug_print("shm name: %s\n", shm_name_ptr);
*fd = shm_open(shm_name_ptr, O_CREAT | O_RDWR | O_EXCL, S_IRUSR | S_IWUSR);
ftruncate(*fd, aligned_size) == -1);
shm_ptr = mmap(NULL, (size_t) aligned_size, PROT_READ | PROT_WRITE,
MAP_SHARED, *fd, 0);
*shm_ptr_ptr = shm_ptr;
Функция __init__ из класса-оболочки, которую я использую в python для открытия shm показан ниже:
Код: Выделить всё
class SharedMemoryWrapper:
"""
Wrapper class to handle shared memory creation and cleanup across platforms.
"""
def __init__(self, name: str, size: int):
self.name = name
self.size = size # Store intended size separately
self._shm = None
try:
# First try to attach to existing shared memory
self._shm = shared_memory.SharedMemory(name=self.name)
unregister(self._shm._name, "shared_memory")
except FileNotFoundError:
# If it doesn't exist, create new shared memory
print("Existing SHM not found, creating a new one...")
self._shm = shared_memory.SharedMemory(name=self.name, create=True, size=self.size)
В Linux блок try работает и shm открывается правильно, однако в MacOS я вижу сообщение «Существующий SHM не найден, создается новый один..."
Пожалуйста, может кто-нибудь объяснить, в чем здесь отличие MacOS и как я могу это исправить, чтобы существующий shm открывался правильно?
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-on-macos
Мобильная версия