Linux назвал эквивалент мьютекса - PullRequest
0 голосов
/ 16 октября 2018

Я отправил похожий вопрос несколько дней назад, но так и не получил ответа.У меня проблема в том, что я работаю над переносом кода 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 массива, один из которых содержит имя очереди, которая используется для «поиска» индекса индекса.другой массив, содержащий указатели на связанные мьютексы, должен быть лучше.

...