• 同步对象 Semaphore


     semaphore:  保证指定个数的并发线程可以访问临界区。 而 lock/mutex:保证只有一个线程可以访问临界区(被lock住的)的资源或者代码。

    namespace MutiThread
    {
        /// <summary>
        /// .net 信号量Semaphore的使用
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //初始化4个线程
                Mythread mythrd1 = new Mythread("Thrd #1");
                Mythread mythrd2 = new Mythread("Thrd #2");
                Mythread mythrd3 = new Mythread("Thrd #3");
                Mythread mythrd4 = new Mythread("Thrd #4");
     
                //Join()方法阻塞调用线程 
                //达到主线程在4个子线程执行完毕才退出的目的
                mythrd1.thrd.Join();
                mythrd2.thrd.Join();
                mythrd3.thrd.Join();
                mythrd4.thrd.Join();
     
            }
        }
     
        /// <summary>
        /// 封装线程类
        /// </summary>
        class Mythread
        {
            public Thread thrd;
            //创建一个可授权2个许可证的信号量,且初始值为2
            static Semaphore sem = new Semaphore(2, 2);
     
            public Mythread(string name)
            {
                thrd = new Thread(this.run);
                thrd.Name = name;
                thrd.Start();
            }
     
            void run()
            {
                Console.WriteLine(thrd.Name + "正在等待一个许可证……");
                //申请一个许可证
                sem.WaitOne();
                Console.WriteLine(thrd.Name + "申请到许可证……");
                for (int i = 0; i < 4; i++)
                {
                    Console.WriteLine(thrd.Name + ": " + i);
                    Thread.Sleep(1000);
                }
                Console.WriteLine(thrd.Name + " 释放许可证……");
                //释放许可证
                sem.Release();
            }
        }
     
    }
      
    

      

  • 相关阅读:
    autorun.inf删除方法
    Re_Write序列号
    最常用的正则表达式
    SQL聚合使用GROUP BY
    Ext.Net的Window控件的简单使用
    SQL统计查询一个表中的记录,然后减法运算
    C#金额转换为汉字大写
    Ext.Net的Button按钮的使用
    C# 参考之方法参数关键字:params、ref及out 引用
    C#连接ACCESS 2007数据库
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/4900824.html
Copyright © 2020-2023  润新知