C# 中的互斥量和信号量是什么?我们需要在哪里实施?
我们如何在多线程中使用它们?
你应该从 MSDN 开始。
通常,您只能跨进程使用 Mutex,例如,如果您有多个应用程序必须共享的资源,或者如果您想构建单实例应用程序(即一次只允许运行 1 个副本)。
信号量允许您限制对特定数量的并发线程的访问,例如,您最多可以有两个线程一次执行特定的代码路径。
我将从阅读以下内容开始:http ://www.albahari.com/threading/part2.aspx#_Synchronization_Essentials ,然后使用发布的 MSDN 链接 bobbymcr 来支持它。
您可能想查看 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);
}