zoukankan      html  css  js  c++  java
  • 同步对象 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();
            }
        }
     
    }
      
    

      

  • 相关阅读:
    javascript通用循环遍历方法forEach
    伪数组
    引用和基本类型
    谈谈Javascript的this指针
    理解内存分配
    理解undefined和null
    getElementsByClassName实现
    NSubstitute完全手册(十五)自动递归模拟
    NSubstitute完全手册(十七)参数匹配器上的操作
    NSubstitute完全手册(九)检查接收到的调用
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/4900824.html
Copyright © 2011-2022 走看看