0

と の 2 つの関数を持つクラスがOpenFileありCloseFileます。それぞれ、 を取得し、mutex適切にリリースします。このようにして、プロセスと異なるスレッド間のファイル アクセスを同期します。ただし、スレッドOpenFileがクローズされる前に 2 回目のスレッドが実行される場合があります。1 つのスレッドがファイルを複数回開かないようにしたい。

4

2 に答える 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 に答える