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

发布于 2024-08-06 23:11:20 字数 1437 浏览 5 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

树深时见影 2024-08-13 23:11:20

您应该从 MSDN 开始。

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

信号量允许您限制对特定数量的并发线程的访问,这样您就可以同时最多有两个线程执行特定的代码路径。

You should start at MSDN.

Generally you only use a Mutex across processes, e.g. if you have a resource that multiple applications must share, or if you want to build a single-instanced app (i.e. only allow 1 copy to be running at one time).

A semaphore allows you to limit access to a specific number of simultaneous threads, so that you could have, for example, a maximum of two threads executing a specific code path at a time.

就像说晚安 2024-08-13 23:11:20

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

I'd start by reading this: http://www.albahari.com/threading/part2.aspx#_Synchronization_Essentials
and then bolster it with the MSDN links bobbymcr posted.

因为看清所以看轻 2024-08-13 23:11:20

您可能想检查锁定语句。它可以处理C#中绝大多数线程同步任务。lock

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来实现的。它相当于下面的代码:

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

You might want to check out the lock statement. It can handle the vast majority of thread synchonization tasks in 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
        }
    }
}

The lock statement is implemented by calling Monitor.Enter and Monitor.Exit. It is equivalent to the following code:

Monitor.Enter(Lock);    
try
{
    // Only one thread at a time is able to enter this section
}
finally
{
    Monitor.Exit(Lock);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文