zoukankan      html  css  js  c++  java
  • 信号量-Semaphore、SemaphoreSlim

    核心类:Semaphore,通过int数值来控制线程个数。

      * 通过观察构造函数 public Semaphore(int initialCount, int maximumCount);:

      * initialCount: 可以同时授予的信号量的初始请求数。

      * maximumCount: 可以同时授予的信号量的最大请求数。

    核心方法:WaitOne和Release

    复制代码
    static Semaphore seLock = new Semaphore(1, 1); //只允许一个线程通过 
    {
    seLock.WaitOne();
    Console.WriteLine(num2++);
    seLock.Release();
    }
    复制代码

    SemaphoreSlim:

    轻量级的信号量实现SemaphoreSlim,其不但能够更加高效的实现信号量的功能,还提供了一个异步等待的API。

    Demo:异步执行不阻塞主线程

    复制代码
            //同步执行
            static void SemphoreTest()
            {
                Task[] tasks = new Task[10];
                for (int i = 0; i < 10; i++)
                {
                    semaphore.Wait();
                    //模拟做事情况
                    Console.WriteLine("excute");
                    Thread.Sleep(1000);
                    semaphore.Release();
                }
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("------");
                }
            }
    //异步执行 static void SemphoreTestAsync() { Task[] tasks = new Task[10]; for (int i = 0; i < 10; i++) { tasks[i] = Task.Run(async () => { await semaphore.WaitAsync(); //模拟做事情况 Console.WriteLine("excute"); Thread.Sleep(1000); semaphore.Release(); }); } for (int i = 0; i < 10; i++) { Thread.Sleep(1000); Console.WriteLine("------"); } Task.WaitAll(tasks); }
    复制代码
  • 相关阅读:
    团队-科学计算器-成员简介及分工
    团队-团队编程项目作业名称-需求分析
    《对软件工程课程的期望》
    《自我介绍》
    个人编程项目
    对软件工程课程的期望
    《自我介绍》
    结队-爬取大麦网近期演唱会信息-项目进度
    团队-排课系统-设计文档
    团队-排课系统-开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14348914.html
Copyright © 2011-2022 走看看