21

C# 中的互斥量和信号量是什么?我们需要在哪里实施?

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

4

3 回答 3

33

你应该从 MSDN 开始。

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

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

于 2009-10-12T06:37:20.087 回答
7

我将从阅读以下内容开始:http ://www.albahari.com/threading/part2.aspx#_Synchronization_Essentials ,然后使用发布的 MSDN 链接 bobbymcr 来支持它。

于 2009-10-12T18:27:49.137 回答
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
        }
    }
}

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

Monitor.Enter(Lock);    
try
{
    // Only one thread at a time is able to enter this section
}
finally
{
    Monitor.Exit(Lock);
}
于 2009-10-12T07:10:29.257 回答