Я работаю над многопоточной программой и задаюсь вопросом, где определить мьютекс.C где определить мьютекс в многопоточной программе?
Релевантная информация: программа имеет main.c
, где мы определяем конкретное действие в соответствии с пользовательским вводом. main вызывает функцию master_function, которая находится в файле с именем master.c
. В файле master.c
мы создаем N потоков по некоторым другим действиям (не относится). В потоках вызывается функция с именем son_threads, которая находится в файле son.c
, и им необходимо использовать мьютекс, когда они входят, вводят критический регион (редактирование нескольких глобальных переменных для предотвращения состояния гонки). Другой файл, который у меня есть, - это type.h
, где я определяю несколько глобальных переменных, которые мне нужно использовать.
Декларация мьютекс:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
Так что я попытался определить мьютекс в моем type.h
так что видны son.c
файлы. Когда я пытаюсь скомпилировать, это дает мне ошибку. Это правильно, так как я определяю этот мьютекс в нескольких файлах.
Но я уверен, что я не могу определить мьютекс в файле son.c
, потому что каждый раз, когда я создаю этот поток, мьютекс будет инициализирован по умолчанию, не позволяя мне правильно его использовать. Не уверен в этом.
Мьютекс должен быть глобальной переменной, в которой потоки N имеют к ней доступ. Итак, где я должен это сказать?
Я не знаю, правильно ли объясняю себя. Стараюсь изо всех сил.
Хорошо, я понимаю, что вы имеете в виду. Позвольте мне посмотреть, как это получается. Спасибо за совет! – Alessandroempire
Я не думаю, что игра с 'GLOBAL' здесь много. Вам нужно объявление в файле '.h' и определение * с инициализацией * в' .c'. Инициализация по умолчанию для 'pthread_mutex_t' не будет выполняться. –
@JensGustedt это именно то, что я только что сделал, и это сработало. Я не заметил, что я инициализировал мьютекс в файле .h. Огромная ошибка. – Alessandroempire