linux - 进程间共享读写锁
问题描述
我有两个进程 rwlock1(parent) 和 rwlock2(child) 。我想在进程之间使用读写锁,我需要转移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;
}
解决方案
mmap
我没有尝试过,但是如果您将锁放在共享内存中(例如由or设置shmget
)并使用pthread_rwlockattr_setpshared
将锁设置为进程共享,看起来可以做到这一点。
推荐阅读
- python - Finding the average of the maximums among a sequence of odd integers
- ffmpeg - 使用 ffmpeg 从 UDP H264 流中抓取的帧是灰色/失真的
- sql-server - 包含计数和分组依据时,无法初始化错误号为 -2147467259 的 sqlcmd 库
- php - 搜索按标题查询自定义帖子类型以及通过 ACF 关系字段链接到它的另一个自定义帖子类型
- perl - Mojolicious 参数验证:可选,空值
- angular - 实现一个无 zonejs 的 Angular 8 项目
- node.js - 用于流的 mp3-duration 包?
- datatables - 如何将数据表省略号应用于此列?
- angular - Angular - 服务工作者不缓存资源
- unity3d - 向目标对象发射 RayCast