2011-08-29 81 views
2

有人请向我解释为什么我在下面的代码中收到错误?Python中信号量的奇怪错误

win32event.WaitForSingleObject(self.my_lock, win32event.INFINITE) 

win32event.ReleaseSemaphore(self.big_semaphore, 1) 
win32event.ReleaseSemaphore(self.small_semaphore, 1) 

win32event.ReleaseMutex(self.my_lock) 

奇怪的这里,如果我评论了信号灯的一个,比如这个:

#win32event.ReleaseSemaphore(self.big_semaphore, 1) 
win32event.ReleaseSemaphore(self.small_semaphore, 1) 

我的代码运行完美,任何想法?我无法发布错误日志,因为它非常大,并且与我的代码的这部分无关。

更多上下文:

我有执行这片码的几道工序。我收到的错误是互斥体为WAIT_ABANDONED,但是当我对ReleaseSemaphore的其中一个呼叫发表评论时,代码运行完美。

+1

你收到什么样的错误?在哪一行?上下文,上下文,更多的上下文... –

+0

奇怪的事情,我收到的错误并不涉及此代码 – yeap

回答

1

WAIT_ABANDONED不是一个真正的错误。这意味着另一个线程或进程拥有互斥锁并终止而不释放互斥锁。操作系统将互斥量的所有权授予下一个等待线程(从WaitFromSingleObject()收到WAIT_ABANDONED结果的线程)。

收到此结果代码时,您可以按照收到WAIT_OBJECT_0的方式继续,但要注意由互斥锁保护的资源状态。

无论如何,您必须调查此返回码,并尝试查找谁在放弃互斥锁。

(有关WAIT_ABANDONED错误多一点的解释,阅读this MSDN article