为控制台应用程序创建锁

时间:2012-05-20 17:09:33

标签: c# locking console-application

我有一个控制台应用程序,它将由设置Windows任务调度程序的不同批处理文件启动。我想在我的应用程序中排队这些命令或者使用某种锁机制,使所有命令在队列中等待,这样一次只能运行一个命令。我正在考虑做某种文件锁定,但我无法理解如何排队命令。我只需要某种方向。

2 个答案:

答案 0 :(得分:2)

对于进程间同步,您可以使用表示命名系统互斥锁的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();
    }
}

答案 1 :(得分:0)

查找Semaphore对象。

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

您总是可以将超时设置为无限,但实时控制程序流并且能够正常中止是实用的。