gpt4 book ai didi

c - 如何使用 pthread 库在堆上的特定位置创建锁?

转载 作者:太空狗 更新时间:2023-10-29 16:09:54 27 4
gpt4 key购买 nike

我正在使用 mmap 分配内存以集合关联的方式存储一些数据,我想在其中同时访问集合。因此,如果有 K 个集合,那么我将为每个集合分配 K+1 个槽位,其中第一个槽位用于元数据。在元数据插槽的开头,我想存储一个锁。那么如何在这个特定位置创建锁呢?我发现使用 sizeof 运算符,锁的大小是 40B。所以我确保每个条目至少为 40B。

通常,我们创建pthread锁使用

pthread_mutex_t lock;

那么,将 40B 的锁变量复制到所需位置是否安全?

由于调试并发程序很困难,如果有人能判断它是否是正确的方法,那就太好了。谢谢。

最佳答案

复制 POSIX 同步对象从来都不是安全的。为了将内存位置变成互斥量,您可以使用 pthread_mutex_init .如果映射是进程共享的,则需要创建一个进程共享的互斥体,使用使用 pthread_mutexattr_setpshared 设置的互斥体属性。 .

在 GNU/Linux 上,必须使用 -lpthread 链接所有参与进程(或使用 -pthread 构建),否则程序将运行,但使用优化的互斥锁在 libc 而不是 libpthread 中实现,后者不支持进程共享互斥锁。

关于c - 如何使用 pthread 库在堆上的特定位置创建锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58223935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com