zoukankan      html  css  js  c++  java
  • C#线程等待句柄

    相互排斥对象 Mutex

    private Mutex m = new Mutex();
    
    public void Method(){
        m.WaitOne();
        //运行操作
        m.ReleaseMutex();
    }

    共享资源Semaphore

    Semaphore是一个信号量,能够让多个资源分类型的同一时候进行。

    书中一个重要的有代表性的样例就是图书馆有多个电脑,有若干个人使用电脑的问题。是一个不错的样例。
    有一个计数器,当信号量达到指定的最大值。就会堵塞。

    等待释放信号。方便协调工作。
    思考:semaphore能够用作某个须要大量发送数据,可是有限的线程来处理的情况,比方说1200个人须要同一时候受到一条信息,可是用了40个线程来发送。

    轻量级的SemaphoreSlim

    SemaphoreSlim和semaphore的作用是一样的。可是SempahoreSlim是轻量级的,不是内核级别的。所以消耗资源比較少,效率更高,个人十分喜欢轻量级的东西。

    EventWaitHandle 等待事件的发生

    主要分为:ManualResetEvent和AuthoResetEvnt两个
    主要是设计一个无限循环的函数来等待条件到来以后运行某个事情。

    在事情到来前,先停下来等待。
    个人在现货交易软件中,行情的发送使用了ManualRestEvent。

    由于我们无法确定行情什么时候到来。所以让行情到来之前等待。行情一旦受到,立刻.Set(),释放信号。

    CountDownEvent 倒计时计数器

    当全部的计数到了0以后,堵塞才会放开,让系统继续运行。


    这个函数能够用在须要多个线程运行某些操作,条件具备以后。開始运行下一步的操作。比方在金融分析系统登录前,我们须要下载系统品种,历史数据。新闻消息。等等多个信息的下载。这些信息的下载不适合在一个线程中去运行。

    我们把每一个操作一个线程,等这些线程都结束以后,我们開始开启主程序。用CountDownEvent非常合适

    分阶段同步 Barrier

    书中举得样例非常好,小王和小李相约去參观鸟巢,小王和小李各自从自己的家出发,会到鸟巢门口集合。

    集合以后去參观鸟巢,參观完了以后。然后各自回家。
    小王和小李,每一个人的情况不一样,所以他们须要等待彼此都到了鸟巢以后。再開始參观。參观的时间可能也不太一样,等參观完了,须要集结。

    然后再各自回家,每一个集结点,都是一个分步。适合用barrier.

  • 相关阅读:
    WCF学习笔记
    下拉框层级绑定
    js在IE可以运行,在Firefox 不运行
    ajax 基础
    Asp.net Mvc Web Api 学习(一)
    阅读暗时间的笔记与心得
    阅读暗时间的心得与笔记
    阅读暗时间的笔记与心得(结束篇)
    阅读暗时间的笔记与心得
    阅读暗时间的心得与笔记
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7142188.html
Copyright © 2011-2022 走看看