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

C 如何使用pthread库在堆上的特定位置创建锁?,c,pthreads,C,Pthreads,我正在使用mmap分配内存,以集合关联的方式存储一些数据,以便同时访问集合。所以,若有K个集合,那个么我将为每个集合分配K+1个插槽,其中第一个插槽用于元数据。在元数据槽的开头,我想存储一个锁。那么如何在这个特定位置创建锁呢?我发现使用sizeof操作符时,锁的大小是40B。所以我确保每个条目至少为40B 通常,我们使用 pthread_mutex_t lock 所以,将40B的lock变量复制到所需的位置是否安全 由于调试并发程序很困难,如果有人能判断这是否是正确的方法,那就太好了。谢谢。复制

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

通常,我们使用

pthread_mutex_t lock

所以,将40B的lock变量复制到所需的位置是否安全


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

复制POSIX同步对象从来都不安全。要将内存位置转换为互斥,可以使用。如果映射是进程共享的,则需要使用使用设置的互斥体属性创建进程共享互斥体

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