zoukankan      html  css  js  c++  java
  • 线程淡写 上海

    一,线程的调度
        一旦分配给某个线程的时间片用完了,处理器就要在线程之间切换,在切换过程中,处理器不是任意选择下一个
    将执行的线程。每个线程都有一个与之相联系的优先级,这个优先级表示该线程与系统中其他线程的关系,以通知处理器
    它应该排在何处。线程的优先级默认为:normal-----该优先级在运行环境中产生。对那些在运行环境之外创建的线程
    来说,它们保持各自原来的优先级。可以使用Thread.Priority值,这是个枚举类型,定义为以下几个值:
     最高(Normal),高于正常(AboveNormal),正常(Normal),低于正常(BelowNormal),最低(Lowest)。
      有这样一种情况,几个线程在同样的优先性下运行,它们将获得等量的处理器时间,叫做“循环调度(round robin scheduling)”.

    二,线程的安全和同步
          当为单线程环境编程时,以这种方式来书写方法很常见的,即在代码中的几个点处,对象处于暂时的无效状态。
        很明显,如果一次仅有一线程在访问对象,你就要保证在另一个方法被调用以前,每个方法都要完成---这就意味
        着对于对象的任何客户而言,目标总是处于有效状态。但是,当多个线程混合在一起交叉调用时,很容易发生
        这样的情形;当对象处于无效状态时,处理器切换到另一个线程。如果这个线程也试图使用同样的对象,
        其结果是很难以预测的。因此,怎样防止产生这种不可预测的状态呢?同步,通过同步,可以指定代码的临界区(critical section)
        ,一次只有一个线程可以进入临界区。  
           类System.Monitor通过  锁定与信号量的方式,使得对于代码快可以进行串行化的访问。主要有两个静态的
         方法。第一个Montor.Enter。当执行Enter方法时,这个方法试图获取对象上的Monitor锁。如果另一个线程已经
         拥有这个锁,这个方法将会阻塞(block),直至这个锁被释放。注意,这里并不执行隐式的框操作,
         因此你可以只为这个方法提供一个引用类型。方法Monitor.Exit接着被调用,以释放锁。
       用C#中的lock语句中使用Monitor锁
           虽然C#的lock语句并不支持Monitor类中所有的特性,但还是可以让你获得和释放一个Monitor锁。
       通过使用Mutex

  • 相关阅读:
    用OxyPlot在WPF中演示正演磁异常的变化规律
    《暗时间》读书笔记
    [C++]KMP算法实现
    [C++]Infinite House of Pancakes——Google Code Jam 2015 Qualification Round
    [C++]Standing Ovation——Google Code Jam 2015 Qualification Round
    [C++]让CPU使用率曲线呈现为正弦曲线(一)
    [C#]中英文字幕合并的小程序
    [C++]Store Credit——Google Code Jam Qualification Round Africa 2010
    [C++]Saving the Universe——Google Code Jam Qualification Round 2008
    [Java]使用队列求解josephus问题
  • 原文地址:https://www.cnblogs.com/luozhai714/p/761467.html
Copyright © 2011-2022 走看看