2010-06-15 6 views
1

Existe-t-il une technique ou un outil disponible pour détecter ce type d'interblocage pendant l'exécution?Détection d'un Mutex périmé

image

cela dans un thread de travail (un de plusieurs, normalement 4-6)

try 
    WaitForSingleObject(myMutex); 
    DoSTuffThatMightCauseAnException; 
except 
    ReleaseMutex(myMutex); 
end; 

ou plus est généralement là un modèle de conception pour éviter ce genre de bugs?

Je codé le code ci-dessus dans le petit Pavillion après une course plus de piratage

+0

Quel est le bogue? – allenporter

+0

@allenporter: Le mutex n'est libéré que lorsqu'une exception se produit, donc une exécution normale conduit à ce que le mutex ne soit pas libéré – sum1stolemyname

Répondre

6

Un meilleur style de codage est d'utiliser try/finally au lieu d'essayer/sauf pour la libération de mutex (ou tout autre type de libération des ressources, d'ailleurs), c'est-à-dire:

try 
    WaitForSingleObject(myMutex); 
    try 
    DoSTuffThatMightCauseAnException; 
    finally 
    ReleaseMutex(myMutex); 
    end; 
except 
    ... 
end;