【问题标题】:What is the Mutex and semaphore In c#? where we need to implement? [closed]c#中的互斥量和信号量是什么?我们需要在哪里实施? [关闭]
【发布时间】:2010-12-05 21:32:49
【问题描述】:

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

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

【问题讨论】:

  • 这个话题太大了,恕我直言,您有什么具体问题吗?
  • Naveen 请给我一些分解的问题,以便我可以深入研究它。

标签: c# multithreading mutex semaphore


【解决方案1】:

你应该从 MSDN 开始。

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

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

【讨论】:

  • +1 为 MSDN。它是 Windows API 空间中所有内容的 RTFM-goto。
  • 信号量也可用于跨进程同步。“命名系统信号量在整个操作系统中都是可见的,可用于同步进程的活动”:msdn.microsoft.com/en-us/library/…
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可能想查看 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);
    }
    

    【讨论】:

    • 不错的答案,并且可能有用,但并不是对所提出问题的真正答案。想过一个-1,但把它留在这个评论中。 ;-)
    • 在 C# 5.0 中实现已更改:)
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2010-10-20
    • 2011-06-24
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2011-04-20
    • 2011-01-20
    相关资源
    最近更新 更多