在进程间共享 read-write 锁
sharing read-write lock between interprocess
我有两个进程 rwlock1(parent) 和 rwlock2(child) 。我想在进程之间使用 read-writer 锁,我需要将 pthread_rwlock_t mem_lock
转移到 child 进程,我有一个简单的代码,我如何转移句柄。我不想使用互斥量。
rwlock1(parent) 的代码
#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;
}
我没试过,但看起来如果你把锁放在共享内存中(例如通过 mmap
或 shmget
设置)并使用 pthread_rwlockattr_setpshared
将锁设置为进程共享。
另见 2.9.9 Synchronization Object Copies and Alternative Mappings in IEEE Std 1003.1-2017。
我有两个进程 rwlock1(parent) 和 rwlock2(child) 。我想在进程之间使用 read-writer 锁,我需要将 pthread_rwlock_t mem_lock
转移到 child 进程,我有一个简单的代码,我如何转移句柄。我不想使用互斥量。
rwlock1(parent) 的代码
#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;
}
我没试过,但看起来如果你把锁放在共享内存中(例如通过 mmap
或 shmget
设置)并使用 pthread_rwlockattr_setpshared
将锁设置为进程共享。
另见 2.9.9 Synchronization Object Copies and Alternative Mappings in IEEE Std 1003.1-2017。