Supponendo che un thread chiama con successo pthread_mutex_lock
, è ancora possibile che una chiamata a pthread_mutex_unlock
in quello stesso thread avrà esito negativo? Se è così, puoi davvero fare qualcosa al riguardo e interrompere il thread?Come gestite i fallimenti di pthread_mutex_unlock?
if(pthread_mutex_lock(&m) == 0)
{
// got the lock, let's do some work
if(pthread_mutex_unlock(&m) != 0) // can this really fail?
{
// ok, we have a lock but can't unlock it?
}
}
Da this page, possibili errori per pthread_mutex_unlock()
sono:
[EINVAL] Il valore specificato dal mutex non si riferisce ad un oggetto inizializzato mutex.
Se il blocco è riuscito, è improbabile che ciò fallisca.
[EAGAIN] Il mutex non poteva essere acquisito perché è stato superato il numero massimo di serrature ricorsive per mutex.
Davvero? Per sbloccare?
La funzione pthread_mutex_unlock() potrebbe non riuscire se:
[EPERM] Il thread corrente non possiede il mutex.
Di nuovo, se il blocco è riuscito, anche questo non dovrebbe verificarsi.
Quindi, i miei pensieri sono se c'è un blocco riuscito, quindi in questa situazione lo sblocco non dovrebbe mai fallire rendendo inutile il controllo degli errori e il successivo codice di gestione.
Grazie, che è praticamente il mio pensiero pure. Ho aggiornato la domanda per spero di rendere più chiaro il motivo per cui lo sto chiedendo. Voglio resistere per vedere se riesco a ottenere qualsiasi altro input prima di accettare una risposta. –