当前位置:编程学习 > 网站相关 >>

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

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 <= 5; i++)
                new Thread(Enter).Start(i); //有5个人向进入
        }
        static void Enter(object id)
        {
            Console.WriteLine(id + " 想要进入了");
            _sem.Wait();
            Console.WriteLine(id
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,