Мне нужно использовать надежные мутекс для МПК на случай, если один из моих процессов вылетает, удерживая заблокированную мутекс. Определение ясно из, например, Man pthread_mutexattr_setRobust и я не буду повторять его здесь.
Мне нужно использовать надежные мутекс для МПК на случай, если один из моих процессов вылетает, удерживая заблокированную мутекс. Определение ясно из, например, Man pthread_mutexattr_setRobust и я не буду повторять его здесь.[code]// lock_and_crash.c #include #include #include #include #include #include #include
typedef struct { pthread_mutex_t mutex; int data; } shared_data_t;
int main() { const char *shm_name = "/robust_mutex_shm";
// Open or create shared memory int shm_fd = shm_open(shm_name, O_CREAT | O_RDWR, 0600); if (shm_fd == -1) { perror("shm_open"); return 1; }
// Resize shared memory to hold shared_data_t ftruncate(shm_fd, sizeof(shared_data_t));
munmap(shared, sizeof(shared_data_t)); shm_unlink(shm_name); return 0; } < /code> Вы можете создать и запустить их, например, < /p> gcc lock_and_crash.c -o lock_and_crash -pthread gcc recover_mutex.c -o recover_mutex -pthread ./lock_and_crash ./recover_mutex [/code] Однако, когда я добавляю один Munmap перед выходом в конце 1 -й процесса lock_and_crash.c : [code]... printf("Process 1: mutex locked, simulating crash (exit without unlock)...\n"); munmap(shared, sizeof(shared_data_t)); // Crash by exiting without unlocking _exit(1); [/code] 2-й процесс висит, pthread_mutex_lock (& shared-> mutex); никогда не возвращается. Почему? Это где -то задокументировано?
Я получил согласованную ошибку в Destructor Mutex. Поскольку ошибка может быть из -за мутекс, в состоянии блокировки во время разрушения, я создаю новый класс Mutex, который унаследован от Boost: Mutex. Это должно убедиться, что мутекс разблокирован...
Я самостоятельно управляю судьей на сервере, работающем Ubuntu 24.04 (последнее обновление) . Все работало нормально на более ранних версиях (например, Ubuntu 22.04), но теперь, после настройки его на 24.04, я получаю следующую ошибку для...
Я пытаюсь реализовать функциональность, необходимую для поддержки глобальной базы данных, скажем, карты строкового объекта и уникального идентификатора. Мне нужно запустить несколько процессов для сбора данных. Я решил использовать очередь в общей...
Я пишу код Boost.Interprocess для общей памяти между двумя процессами. Я использую Managed_shared_memory. Я инициализирую память с помощью boost::interprocess::open_or_create и выделяю в ней память с помощью find_or_construct, вот так:
auto...
Ищу any Way , чтобы сделать модуль WASM C ++, скомпилированным с Clang, использовать общую память, чтобы основной поток браузера мог позвонить веб -работнику для запуска кода WASM без блокирования основного потока. Это чистый код C ++, составленный...