Linux命名为互斥体等效

时间:2018-10-16 17:19:56

标签: synchronization mutex

几天前,我发布了一个类似的问题,但并未真正得到答案。我遇到的问题是我正在将Windows实时(RTX)代码移植到Linux,并且它使用命名的互斥锁作为同步数据队列的方法。问题是,我知道可以在共享内存中设置Linux中的互斥锁,这很好,问题是我的队列管理器从不知道需要设置多少个互斥锁,直到有人知道它为止,对此一无所知调用它以创建一个带有关联互斥量的新队列。 Windows通过使用命名的互斥锁来管理此操作,因此当有人尝试创建或打开现有队列时,它能够按名称获取其关联的互斥锁,而我在Linux中找不到正确的方法。我无法在此处发布实际代码,但以下是一些关键片段:

typedef struct Node{
void    *qid;
void    shmOnj;
char    qname[80]
char    semname[80]
sem_t   *semid
struct  Node *next
struct  Node *prev

}

struct GnrlQ {
pthread_mutex_t     *qMutexid
sem_t           *qSemid
int         msize
int         depth
int         nexton
int         nextoff
char            msgarray[]

}

代码使用以上结构来建立链接列表(节点)和队列,当有人创建队列并将其强制转换为队列结构时,代码将创建共享内存空间。

当另一个调用者尝试打开并使用现有队列时,问题就来了,它可以使用mmap和指定的区域来获取相同的共享内存区域,并使用指向命名地址的指针在新节点中进行设置,并设置其他属性,包括信号量和互斥量。问题在于尝试获取互斥锁。

我想到的解决方法似乎很混乱,在这里我保留了2个数组,其中一个包含队列的名称,该数组用于“查找”另一个数组的索引,该数组包含指向相关互斥对象的指针,更好的方法。

0 个答案:

没有答案