windows - mærkelig fejl af semaphoren i python

Indlæg af Hanne Mølgaard Plasc

Problem



Kan nogen forklare mig, hvorfor jeg får en fejl i følgende kode?


win32event.WaitForSingleObject(self.my\_lock, win32event.INFINITE)

win32event.ReleaseSemaphore(self.big\_semaphore, 1)
win32event.ReleaseSemaphore(self.small\_semaphore, 1)

win32event.ReleaseMutex(self.my\_lock)


Den mærkelige ting her, at hvis jeg kommenterer en af ​​semaforerne, sådan:


#win32event.ReleaseSemaphore(self.big\_semaphore, 1)
win32event.ReleaseSemaphore(self.small\_semaphore, 1)


min kode kører perfekt, nogen ide? Jeg kan ikke sende fejlloggen, fordi den er meget stor og ikke vedrører denne del af min kode.


Mere kontekst:


Jeg har et par processer, der udfører dette stykke kode. Fejlen jeg modtager er, at mutex var WAIT\_ABANDONED, men når jeg kommenterer et af opkaldene til ReleaseSemaphore kører koden perfekt.

Bedste reference


WAIT\_ABANDONED er ikke rigtig en fejl. Det betyder, at en anden tråd eller proces var at eje mutexen og afsluttet uden at frigive mutexen. Operativsystemet giver ejendomsretten til mutex til den næste ventetråd (den som modtager resultatet WAIT\_ABANDONED fra WaitFromSingleObject()).


Når du modtager denne resultatkode, kan du fortsætte som om du modtog en WAIT\_OBJECT\_0, men pas på tilstanden af ​​de ressourcer, der er beskyttet af mutex.


Anyway, du er nødt til at undersøge denne returkode og forsøge at finde, hvem der overgiver mutexen.


(For en lidt mere forklaring på fejlen WAIT\_ABANDONED læs denne MSDN artikel) [10]