Estoy trabajando en un programa multihilo y tengo una pregunta sobre dónde definir el mutex.C ¿dónde definir un mutex en un programa de multiproceso?
información relevante: el programa tiene un main.c
en el que una acción específica determinada de acuerdo con la entrada del usuario. main llama a una función maestra que se encuentra en un archivo llamado master.c
. En el archivo master.c
creamos los N hilos a lo largo de algunas otras acciones (no relevantes). Los hilos llaman a una función llamada son_threads que se encuentra en un archivo son.c
y necesitan usar un mutex cuando entran en una región crítica (editando varias variables globales para evitar condiciones de carrera). Otro archivo que tengo es type.h
donde defino varias variables globales que necesito usar.
La declaración de exclusión mutua es:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
Así que trataron de definir la exclusión mutua en mi type.h
por lo que es visible para los archivos son.c
. Cuando intento compilarlo, me da error. Lo cual es correcto ya que estoy definiendo ese mutex en varios archivos.
Pero estoy bastante seguro de que no puedo definir el mutex en el archivo son.c
porque cada vez que creo ese hilo, el mutex se inicializará a su configuración predeterminada, no permitiéndome usarlo correctamente. No estoy seguro de esto
La exclusión mutua tiene que ser una variable global, donde los hilos N tienen acceso a ella. Entonces, ¿dónde se supone que debo ponerlo?
No sé si me explico a mí mismo. Estoy intentando lo mejor.
Ok Entiendo lo que quieres decir. Déjame ver cómo funciona. ¡Gracias por el consejo! – Alessandroempire
No creo que el juego con 'GLOBAL' sirva mucho, aquí. Necesita una declaración en el archivo '.h' y una definición * con inicialización * en' .c'. La inicialización predeterminada para 'pthread_mutex_t' no funcionaría. –
@JensGustedt eso es exactamente lo que acabo de hacer y funcionó. No me di cuenta de que estaba inicializando el mutex en el archivo .h. Un gran error. – Alessandroempire