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