我有一个有两个功能的类 -OpenFile
和CloseFile
. 他们分别获得 amutex
并适当地释放它。这样我可以在进程和不同线程之间同步文件访问。但是,有一种情况,线程OpenFile
在关闭之前会第二次。我想阻止一个线程多次打开文件。
问问题
492 次
2 回答
0
您可以使用Thread.SetData
andThread.GetData
存储某个标志的值,该标志确定文件是否被当前线程打开。
于 2012-06-19T11:37:26.560 回答
0
由于您没有代码示例,因此很难确切地看到您在做什么。
看来您的锁定模式是错误的。您需要控制打开和关闭文件的流程。
实现此目的的一种方法是将文件访问修改为单例类型的模式。在单例中,您在打开文件时获得锁。执行您的写入,关闭文件并解锁。所有访问都通过这个地方完成,因此应该有助于协调您的文件访问。
这是多线程单例的基本框架,结合了 ReadWriterLock,如前所述。
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
public void WriteToFile(string value)
{
cacheLock.EnterWriteLock();
try
{
// perform your file write here
}
finally
{
cacheLock.ExitWriteLock();
}
}
}
看看这里的注释和示例,这应该会有所帮助:
http://msdn.microsoft.com/en-us/library/ff650316.aspx
http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx
于 2012-06-19T10:32:01.883 回答