Sto lavorando a un programma multi-thread e ho una domanda su dove definire il mutex.C dove definire un mutex in un programma multithread?
Informazioni rilevanti: il programma ha uno main.c
in cui viene determinata un'azione specifica in base all'input dell'utente. main chiama una master_function che si trova in un file chiamato master.c
. Nel file master.c
creiamo i thread N insieme ad altre azioni (non rilevanti). I thread chiamano una funzione denominata son_threads che si trova in un file son.c
e devono utilizzare un mutex quando entrano in un'area critica (modificando diverse variabili globali per impedire condizioni di competizione). Un altro file che ho è un type.h
dove definisco diverse variabili globali che devo usare.
La dichiarazione di mutex è:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
Così ho provato a definire il mutex nel mio type.h
quindi è visibile ai file son.c
. Quando provo a compilare mi dà errore. Quale è corretto poiché sto definendo quel mutex in diversi file.
Ma sono abbastanza sicuro di non riuscire a definire il mutex nel file son.c
perché ogni volta che creo quel thread, il mutex verrà inizializzato sull'impostazione predefinita, non permettendomi di usarlo correttamente. Non sono sicuro di questo.
Il mutex deve essere una variabile globale, in cui i thread N possono accedervi. Quindi dove dovrei metterlo?
Non so se mi sto spiegando bene. Sto facendo del mio meglio.
Ok capisco cosa intendi. Fammi vedere come funziona. Grazie per il consiglio! – Alessandroempire
Non penso che il gioco con 'GLOBAL' serva molto, qui. Hai bisogno di una dichiarazione nel file '.h' e una definizione * con inizializzazione * in' .c'. L'inizializzazione predefinita per 'pthread_mutex_t' non funzionerebbe. –
@JensGustedt questo è esattamente quello che ho appena fatto e ha funzionato. Non ho notato che stavo inizializzando il mutex nel file .h. Tremendo sbaglio. – Alessandroempire