什么是互斥锁和信号量在c#中?我们需要实施的地方?

时间:2009-10-12 06:26:48

标签: c# multithreading mutex semaphore

C#中的互斥锁和信号量是什么?我们需要实施的地方?

我们如何在多线程中使用它们?

3 个答案:

答案 0 :(得分:30)

你应该从MSDN开始。

通常,您只在跨进程使用Mutex,例如如果您有多个应用程序必须共享的资源,或者您想要构建单实例应用程序(即只允许一次运行1个副本)。

信号量允许您限制对特定数量的并发线程的访问,因此您可以拥有,例如,一次最多执行两个线程执行特定代码路径。

答案 1 :(得分:6)

您可能想要查看lock语句。它可以处理C#

中的绝大多数线程同步任务
class Test {
    private static object Lock = new object();

    public function Synchronized()
    {
        lock(Lock)
        {
            // Only one thread at a time is able to enter this section
        }
    }
}

通过调用Monitor.Enter和Monitor.Exit来实现lock语句。它等同于以下代码:

Monitor.Enter(Lock);    
try
{
    // Only one thread at a time is able to enter this section
}
finally
{
    Monitor.Exit(Lock);
}

答案 2 :(得分:6)

我首先阅读:http://www.albahari.com/threading/part2.aspx#_Synchronization_Essentials  然后用发布的MSDN链接bbbymcr来支持它。