совместное использование блокировки чтения-записи между процессами - PullRequest
1 голос
/ 26 мая 2020

У меня два процесса rwlock1 (родительский) и rwlock2 (дочерний). Я хочу использовать блокировку чтения-записи между процессами, мне нужно передать pthread_rwlock_t mem_lock дочернему процессу, у меня есть простой код, как я могу передать дескриптор. Я не хочу использовать мьютекс.

rwlock1 (родительский) код

#include <unistd.h>
#include <pthread.h>
#include <sys/wait.h>

pthread_rwlock_t mem_lock;

int main() {
   pid_t pid;

   //init attr
   pthread_rwlockattr_t mem_lock_attr;
   pthread_rwlockattr_init(&mem_lock_attr);
   pthread_rwlockattr_setpshared(&mem_lock_attr, 1);

   //init read writer lock
   pthread_rwlock_init(&mem_lock, &mem_lock_attr);

   pid = fork();
   if (pid == 0) {
       execl("rwlock2", "rwlock2", (char *) nullptr);
   }

   //wait child
   wait(nullptr);

   return 0;
}




1 Ответ

2 голосов
/ 26 мая 2020

Я не пробовал, но похоже, что это можно сделать, если вы поместите блокировку в общую память (например, настроенную mmap или shmget) и используете pthread_rwlockattr_setpshared, чтобы установить блокировку как процесс- общий.

См. также 2.9.9 Копии объектов синхронизации и альтернативные сопоставления в IEEE Std 1003.1-2017 .

...