郦湘云 发表于 2025-5-29 15:45:12

深入浅出多线程系列之五:一些同步构造(上篇)

1:Mutex
Mutex 就像一个C# lock一样,不同的是它可以跨进程.
进入和释放一个Mutex要花费几毫秒,大约比C#的lock慢50倍。
使用一个Mutex的实例,调用WaitOne方法来获取锁,ReleaseMutex方法来释放锁。
因为Mutex是跨进程的,所以我们可以使用Mutex来检测程序是否已经运行。
        public static void MainThread()
        {
            using (var mutex = new Mutex(false, "LoveJenny OneAtATimeDemo"))
            {
                if (!mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                {
                    Console.WriteLine("只能运行一个应用程序!");
                    return;
                }

                RunProgram();
            }
        } 
2:Semaphore:
一个Semaphore就像一个酒吧一样,通过门卫来限制它的客人,一旦到达限制,没有人可以进入,
人们会在门外乖乖的排队,一旦有一个人离开酒吧,排队中的人就可以进入了一个了。
下面是个例子:
    class TheClub
    {
       //只能容纳三个人的酒吧
        static SemaphoreSlim _sem = new SemaphoreSlim(3);

        public static void MainThread()
        {
            for (int i = 1; i  0) 
                    {
                        task = _tasks.Dequeue();
                        if (task == null)
                            return;
                    }
                    if (task != null) //如果有任务的话,执行任务
                    {
                        Console.WriteLine("Performing task: " + task);
                        Thread.Sleep(1000);
                    }
                    else //否则阻塞,去睡觉吧
                    {
                        _wh.WaitOne();
                    }
                }
            }
        }
    }主线程调用如下:
        public static void Main()
        {
            using (ProducerConsumerQueue q = new ProducerConsumerQueue())
            {
                q.EnqueueTask("Hello");
                for (int i = 0; i 

洪思思 发表于 2025-10-17 04:45:26

不错,里面软件多更新就更好了

笙芝 发表于 2025-10-17 15:56:41

用心讨论,共获提升!

叭遭段 发表于 2025-12-27 14:15:51

感谢发布原创作品,程序园因你更精彩

卢莹洁 发表于 2026-1-6 12:47:38

感谢发布原创作品,程序园因你更精彩

郜庄静 发表于 2026-1-14 20:02:14

这个好,看起来很实用

谭皎洁 发表于 2026-1-18 01:16:43

这个好,看起来很实用

盛天欣 发表于 2026-1-21 06:20:33

东西不错很实用谢谢分享

南宫玉英 发表于 2026-1-21 21:10:15

感谢发布原创作品,程序园因你更精彩

沦嘻亟 发表于 2026-1-23 17:15:07

用心讨论,共获提升!

骆贵 发表于 2026-1-24 09:20:47

感谢,下载保存了

歇凛尾 发表于 2026-1-25 11:25:43

热心回复!

距佰溘 发表于 2026-1-25 11:35:02

yyds。多谢分享

距佰溘 发表于 2026-1-29 06:31:11

这个有用。

蔓好 发表于 2026-1-30 07:33:41

用心讨论,共获提升!

岳娅纯 发表于 2026-2-1 17:38:55

过来提前占个楼

讥慰捷 发表于 2026-2-2 05:14:55

感谢,下载保存了

皮仪芳 发表于 2026-2-2 05:15:27

感谢发布原创作品,程序园因你更精彩

闻成 发表于 2026-2-2 15:44:16

东西不错很实用谢谢分享

坡琨 发表于 2026-2-3 03:08:22

感谢分享,学习下。
页: [1] 2
查看完整版本: 深入浅出多线程系列之五:一些同步构造(上篇)