我正在使用XML文件来存储值。可以从多种方法访问此XML文件。
Private object lockObject = new object()
Method1
{
Lock(this.lockObject)
{
MyCommonMethod()
}
}
Timer.ElapseEvent
{
Lock(this.lockObject)
{
MyCommonMethod()
}
}
MyCommonMethod()
{
// Read/Write to XML file.
var element = XElement.Load(path);
// some operations
element.save(path)
}
现在,这个类已被多个项目(服务)使用,而这些项目又被合并到一个项目中。
我可以在一个类中使用STATIC锁定对象吗?它会在这种不同进程的情况下工作吗?
因此有可能他们同时使用该文件,有时它会给我一个错误,即不同的线程拥有该文件,尽管我保留了LOCK。
这个赛场上最好的解决方案是什么? 请指导。
这个链接怎么样......
Is there a way to check if a file is in use?
这是最好的方法,或者我应该选择Mutex?
请指导..
答案 0 :(得分:3)
看起来它不是“不同的应用程序域”问题,而是“不同的进程”问题。无论如何,您可以应用严格的同步解决方案,如mutex:
mutex.WaitOne();
MyCommonMethod();
mutex.ReleaseMutex();
此外,如果您使用的是C#4.0,则可以使用Memory-Mapped I/O来实现此目的。
答案 1 :(得分:2)
不同进程之间不会共享静态变量。
你可以:
如果文件已被锁定(它只是立即抛出异常),则选项(1)不会阻止 - 如果要模拟阻塞行为,则必须重复"poll"该文件。另一方面,只要您的应用程序是唯一访问该文件的应用程序,选项(2)将起作用。选择你的毒药。