Pthread_mutex_init e pthread_mutex_destroy
Il documento descrive le funzioni pthread_mutex_init e pthread_mutex_destroy, utilizzate per inizializzare o distruggere un mutex. Queste funzioni fanno parte delle specifiche dello Single UNIX ® Specification, Versione 2, Copyright © 1997 The Open Group.
Sintassi
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
pthread_mutex_t = PTHREAD_MUTEX_INITIALIZER;
Descrizione
La funzione pthread_mutex_init() inizializza il mutex referenziato da mutex con gli attributi specificati da attr. Se attr è NULL, vengono utilizzati gli attributi predefiniti del mutex; l'effetto è lo stesso di passare l'indirizzo di un oggetto di attributi del mutex predefinito. Al termine dell'inizializzazione con successo, lo stato del mutex diventa inizializzato e sbloccato. Tentare di inizializzare un mutex già inizializzato provoca un comportamento indefinito.
La funzione pthread_mutex_destroy() distrugge l'oggetto mutex referenziato da mutex; l'oggetto mutex diventa, di fatto, non inizializzato. Un'implementazione può far sì che pthread_mutex_destroy() imposti l'oggetto referenziato da mutex a un valore non valido. Un oggetto mutex distrutto può essere reinizializzato usando pthread_mutex_init(); i risultati di un riferimento all'oggetto dopo che è stato distrutto sono indefiniti. È sicuro distruggere un mutex inizializzato che è sbloccato. Tentare di distruggere un mutex bloccato provoca un comportamento indefinito.
Nei casi in cui gli attributi del mutex predefiniti sono appropriati, il macro PTHREAD_MUTEX_INITIALIZER può essere utilizzato per inizializzare mutex che sono allocati staticamente. L'effetto è equivalente all'inizializzazione dinamica tramite una chiamata a pthread_mutex_init() con il parametro attr specificato come NULL, eccetto che non vengono eseguiti controlli di errore.
Valore di ritorno
Se l'operazione è completata con successo, le funzioni pthread_mutex_init() e pthread_mutex_destroy() restituiscono zero. Altrimenti, viene restituito un numero di errore per indicare l'errore. I controlli di errore [EBUSY] e [EINVAL], se implementati, agiscono come se fossero eseguiti immediatamente all'inizio dell'elaborazione della funzione e causano un ritorno d'errore prima di modificare lo stato del mutex specificato da mutex.
Errori
La funzione pthread_mutex_init() fallirà se:
[EAGAIN]
-
Sistemi operativi - Syscall fork
-
Sistemi operativi - Syscall fprintf
-
Sistemi operativi - Syscall memcpy
-
Sistemi operativi - Syscall msgsnd