next up previous contents index return to home!
Next: Un esempio: Meccanismi di Up: Multithreading Previous: Esempio di creazione di   Indice   Indice analitico


Meccanismi di mutua esclusione

Lo standard Posix supporta meccanismi di mutua esclusione per mezzo del nuovo tipo di dato pthread_mutex_t, che è la struttura dati usata per la gestione della mutua esclusione, e di tutta una serie di routine di nucleo che vi operano.

Le routine messe a disposizione dallo standard Posix sono principalmente due :



#include<pthread.h>

int pthread_mutex_lock (pthread_mutex_t *mutex);
int pthread_mutex_unlock (pthread_mutex_t *mutex);


Argomenti in ingresso :

mutex
- Indirizzo del semaforo.

Valore restituito :

0
- In caso di successo.
${\bf\neq 0}$
- In caso di insuccesso.

Queste due funzioni servono rispettivamente per acquisire e rilasciare un semaforo di mutua esclusione. La funzione pthread_mutex_lock ritorna al thread chiamante solamente ad acquisizione avvenuta o allo scattare di una condizione di errore. Di questa funzione esiste anche una versione non bloccante che ritorna immediatamente e che ha la seguente sintassi :



#include<pthread.h>

int pthread_mutex_trylock (pthread_mutex_t *mutex);


Argomenti in ingresso :

mutex
- Indirizzo del semaforo.

Valore restituito :

0
- Se il semaforo è stato acquisito.
EBUSY
- Se il semaforo era già occupato.

È importante sottolineare che le routine e il tipo di dato appena visti servono solamente per casi di mutua esclusione. Per casi più complessi di sincronizzazione su una certa condizione esistono dei meccanismi più raffinati che verranno esaminati nel seguito.



Subsections
next up previous contents index
Next: Un esempio: Meccanismi di Up: Multithreading Previous: Esempio di creazione di   Indice   Indice analitico
Giuseppe Lipari 2002-10-27