1

Windowsタスクスケジューラをセットアップするさまざまなバッチファイルによって開始されるコンソールアプリケーションがあります。これらのコマンドをキューに入れるか、すべてのコマンドがキューで待機する何らかのロック メカニズムをアプリケーションに設定して、一度に 1 つのコマンドのみが実行されるようにしたいと考えています。私はある種のファイルロックを行うことを考えていましたが、キューイングコマンドでどのように機能するかについて頭を悩ませることはできません. 何らかの方向性が必要なだけです。

4

2 に答える 2

3

プロセス間の同期にはMutex、名前付きシステム ミューテックスを表すインスタンスを使用できます。

// Generate your own random GUID for the mutex name.
string mutexName = "afa7ab33-3817-48a4-aecb-005d9db945d4";

using (Mutex m = new Mutex(false, mutexName))
{
    // Block until the mutex is acquired.
    // Only a single thread/process may acquire the mutex at any time.
    m.WaitOne();

    try
    {
        // Perform processing here.
    }
    finally
    {
        // Release the mutex so that other threads/processes may proceed.
        m.ReleaseMutex();
    }
}
于 2012-05-20T17:19:12.577 に答える
0

オブジェクトを探しSemaphoreます。

_resultLock = new Semaphore(1, 1, "GlobalSemaphoreName");
if (!_resultLock.WaitOne(1000, false))  
{
    //  timeout expired
}
else
{
    //  lock is acquired, you can do your stuff
}

タイムアウトはいつでも Infinite に設定できますが、時々プログラム フローを制御して正常に中止できるようにするのが実用的です。

于 2012-05-20T17:14:08.843 に答える