と の 2 つの関数を持つクラスがOpenFile
ありCloseFile
ます。それぞれ、 を取得し、mutex
適切にリリースします。このようにして、プロセスと異なるスレッド間のファイル アクセスを同期します。ただし、スレッドOpenFile
がクローズされる前に 2 回目のスレッドが実行される場合があります。1 つのスレッドがファイルを複数回開かないようにしたい。
質問する
492 次
2 に答える
0
Thread.SetData
およびを使用しThread.GetData
て、現在のスレッドでファイルが開いているかどうかを判断するフラグの値を格納できます。
于 2012-06-19T11:37:26.560 に答える
0
コード例がないため、何をしているのかを正確に理解することは困難です。
ロック パターンが間違っているようです。ファイルを開いたり閉じたりするフローを制御する必要があります。
これを実現する方法の 1 つは、ファイル アクセスをシングルトン タイプのパターンに変更することです。シングルトン内では、ファイルが開かれたときにロックを取得します。書き込みを実行し、ファイルを閉じてロックを解除します。すべてのアクセスはこの 1 か所から行われるため、ファイル アクセスの調整に役立ちます。
これは、前述のように、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 に答える