La documentazione Microsoft non dice cosa succede se per errore si chiama ReleaseMutex()
quando il mutex è già sbloccato.Cosa succede se I ReleaseMutex() due volte?
Dettagli:
sto cercando di sistemare un po 'di codice di Windows senza avere accesso al compilatore.
Mi rendo conto che i mutex WinApi sono tutti ricorsivi e conteggiati con riferimento. Se stavo facendo uso di quella funzione, è ovvio che la chiamata in più ReleaseMutex()
avrebbe decrementato prematuramente il contatore di riferimento.
Tuttavia, il codice che sto guardando non utilizza il mutex in modo ricorsivo, quindi il conteggio dei riferimenti non supera mai '1'. E 'fa rilasciare il mutex più volte del necessario ... quindi cosa succede? Il conteggio dei riferimenti diventa negativo? Rimane a zero (sbloccato) e restituisce solo un errore ignorabile?
(Naturalmente, questo codice in realtà non verificare la presenza di errori quando chiama queste funzioni!)
Questa è una domanda davvero brutta. Anche se lo sapessi, 'controlla sotto WinXP' potrebbe essere completamente diverso sotto Win7. Quindi non dovresti davvero mai farlo. (NB: penso sia spuntato) – Christopher
La documentazione non è silenziosa: http://msdn.microsoft.com/en-us/library/ms685066%28VS.85%29.aspx – peejaybee
peejaybee, dovresti aggiornarlo commentare per una risposta! –