我正在使用两个
Windows服务,其中有一个通常的数据库,我想用一个系统Mutex来锁定(跨进程).
现在我想知道是否可以在try-finally块中调用WaitOne()和ReleaseMutex(),或者我也应该处理Mutex(例如在使用块中).如果是这样,我想我应该总是在WaitOne()方法上捕获AbandonedMutexException,或者我在这里错了?
解决方法
互斥是Windows内核对象(这里包含在.NET对象中).
因此,它是一个非托管资源,应该处理.
更准确地说,.NET对象包含一个互斥体的HANDLE,它必须以某种方式被释放/处置.
我不相信那个互斥体对象没有处理的那个code sample in the Mutex class docs.虽然Henzi在评论中有一个很好的意见:Mutex对象是静态的,并且将由终结器处理或在进程退出时由Windows内核销毁.
另外,请注意,Close()也处理对象.
当然,即使你不使用它,在你的应用程序中保留一个现有的Mutex对象就没有任何问题.他们是轻的资源.