我正在分配内存mmap
,用于以集合关联的方式存储一些数据,我想同时访问集合。因此,如果有K个集合,那么我将为每个集合分配K + 1个时隙,其中第一个时隙用于元数据。在这里,在元数据插槽开始时,我想存储一个锁。那么,如何在此特定位置创建锁?我发现使用sizeof运算符,锁的大小为40B。因此,我确保每个条目至少为40B。
通常,我们使用以下命令创建pthread锁定
pthread_mutex_t锁定;
因此,将锁变量40B复制到所需位置是否安全?
由于调试并发程序很困难,因此如果有人可以告诉您这样做是正确的方法,那就太好了。谢谢。
复制POSIX同步对象永远都不安全。为了将存储位置变成互斥锁,可以使用pthread_mutex_init
。如果映射是进程共享的,则需要使用使用设置的互斥锁属性来创建进程共享的互斥锁pthread_mutexattr_setpshared
。
在GNU / Linux上,必须将所有参与的进程与链接-lpthread
(或使用进行构建-pthread
),否则程序将运行,但要在libc中使用优化的互斥锁实现,而不要使用libpthread,后者不支持进程共享的互斥锁。