Come viene implementato pthread_mutex_lock

Sono solo curioso di sapere come vengono implementate le funzioni relative alla sincronizzazione tra i thread all’interno di Unix. Ad esempio, cosa succede quando chiamo pthread_mutex_lock ? Ci sono dei puntatori in uso? Un riferimento al codice sorgente sarebbe davvero d’aiuto.

È sia complicato che diverso dalla variante Unix a Unix.

In Linux, ad esempio, viene utilizzato un sistema chiamato Futex (Short for Fast Userspace Mutex).

In questo sistema viene eseguita un’operazione di incremento e test atomici sulla variabile mutex nello spazio utente.

Se il risultato dell’operazione indica che non vi era alcun conflitto sul blocco, la chiamata a pthread_mutex_lock ritorna senza che il contesto entri nel kernel, quindi l’operazione di prendere un mutex può essere molto veloce.

Solo se è stata rilevata una contesa, si verifica una chiamata di sistema (chiamata futex) e un cambio di contesto nel kernel che mette in attesa il processo chiamante finché non viene rilasciato il mutex.

Ci sono molti altri dettagli in più, in particolare per mutex ereditari e / o prioritari, ma questa è l’essenza di ciò.

Per maggiori dettagli vedi: http://linux.die.net/man/2/futex e http://en.wikipedia.org/wiki/Futex

Su Linux, pthreads è disponibile tramite libc. Il solito è glibc e la fonte è disponibile qui !

Controlla questo riferimento .