Is this the proper use of a mutex?我遇到的情况是我可能同时运行一个程序的多个实例,并且重要的是,一个特定的函数不能一次在多个实例中执行。 这是使用互斥量防止这种情况发生的正确方法吗?
您说一个应用程序有多个实例,所以我们正在谈论两个program.exe正在运行,对吗? lock语句不会锁定多个程序,而只是锁定在该程序中。如果要使用真正的Mutex,请查看System.Threading.Mutex对象。 这是一个用法示例:
createdNew变量将让您知道它是否是第一次创建。但是,它仅告诉您是否已创建。如果要获取锁,则需要调用WaitOne,然后调用ReleaseMutex来释放它。如果只想查看是否创建了互斥锁,则只需构造它即可。 TheSeeker是正确的。 Jeff Richter在Clr Via C#(p638-9)中关于锁定的建议是创建一个专用于锁定的私有对象。
之所以可行,是因为_lock不能被当前类之外的任何东西锁定。 EDIT:这适用于在单个进程中执行的线程。 @David Mohundro的答案对于进程间锁定是正确的。 |