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.