(non?) Associazione mutex - variabile in pthread

di il
2 risposte

(non?) Associazione mutex - variabile in pthread

Ciao Forum,

Il mio background nel multithreading è scarso, ho scritto qualche programmino ma niente di più. Vorrei quindi chiedere una cosa che non mi appare chiara dai vari tutorials e risorse che ho trovato in rete.

L'esempio più diffuso che trovo è l'"acquisizione" di una variabile globale; in pratica si chiama pthread_mutex_lock, segue settaggio o lettura della variabile, e poi si invoca l'unlock. Se ho capito bene, questo rende l'operazione atomica almeno ad alto livello, quello logico del flusso del programma. Quello che non mi è chiaro è cosa succede in realtà, ovvero: stando agli esempi, ipotizzerei che le funzioni di lock/unlock "sappiano" che in mezzo ci sono assegnazioni o letture di variabili e impediscono agli altri thread di accederci mettendoli in pausa finché la variabile non è rilasciata. Ma io mi aspetterei che il mutex venisse esplicitamente associato alla variabile, mentre così sembra che sia il compilatore a capire che cosa sta in mezzo alle due chiamate, cosa peraltro che mi pare realizzabilissima. Se non è così, mi viene da pensare che appena il thread incontra il lock, tutti gli altri vengano sospesi a prescindere così si è sicuri che le variabili globali non possano venire manipolate dagli altri thread in esecuzione.

Insomma ho le idee un po' poco chiare; sapere cosa accade a livello più basso forse mi aiuterebbe a servirmi correttamente di questi meccanismi.

Dimenticavo: ho postato qui perché a quanto ne so pthread è legato al mondo C/C++, ma suppongo che il discorso sia generale. Però non sapevo quale sezione del forum fosse più adatta.

2 Risposte

  • Re: (non?) Associazione mutex - variabile in pthread

    La cosa e' piu' banale di cosi': il mutex (mutual exclusion) e' un oggetto a tutti gli effetti.

    Quando un thread fa il lock, l'oggetto si segna che c'e' un thread che lo sta utilizzando.
    Se un'altro thread lo richiede, il mutex lo blocca/lo mette in attesa su una coda (ci possono essere piu' thread che lo richiedono)

    Quando il thread che lo ha acquisito, lo rilascia, viene sbloccato il primo thread nella coda di attesa che non fa altro che terminare la procedura di acquisizione dell'oggetto.

    Che cosa fa un tread tra l'acquisizione ed il rilascio del mutex, al mutex NON INTERESSA minimamente.
  • Re: (non?) Associazione mutex - variabile in pthread

    Grazie mille, chiarissimo ed esaustivo!
Devi accedere o registrarti per scrivere nel forum
2 risposte