我是这个论坛的新手,请接受我的第一篇文章。我正在研究从VB6迁移的.Net应用程序,该应用程序使用同一类的多个实例进行多处理。但.Net中的一个文件操作比vb6花费更长的时间,这导致.Net中的问题,因为监听器用于监视它。我想知道是否可以使用互斥锁来锁定此方法(已经有文件操作),以便其他实例不会执行此代码。代码类似于下面。
Main()
{
FileWriter objA = new FileWriter()
FileWriter objB = new FileWriter()
...
objA.CreatePDFFile()
objB.CreatePDFFile()
...
}
Class FileWriter
{
bool CreatePDFFile()
{
using ( Mutex mutx = new Mutex( false, @"Global\" + appGuid)
{
mutx.WaitOne();
....//File operations code over here
mutx.ReleaseMutex()
}
}
}
如果上述方法有效,请告诉我。
答案 0 :(得分:0)
互斥锁通过在任何给定时间仅由单个线程保持来同步访问。您的代码将阻止多个FileWriter.CreatePDFFile()
实例同时执行。
因为它使用名为的互斥锁,它还会同步系统上各个进程的访问权限,例如:使用FileWriter
类的所有应用程序的所有实例。
您对模拟的描述令人困惑。如果您只运行一个使用该类的进程,并且该进程只有一个线程,则互斥锁将无效。