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

  • 相关阅读:
    CGI, FCGI, SCGI, WSGI 释异
    Boa Web Server 缺陷报告及其修正方法
    2.1 linux C 进程与多线程入门--(1)进程和程序的区别
    利用socket实现双机通信
    1、进程管理
    第一章:进程与线程总结
    8、linux网络编程--多播
    6、linux网络编程--UDP协议编程
    7、linux网络编程--广播
    4、linux网络编程--套接字的介绍
  • 原文地址:https://www.cnblogs.com/luozhai714/p/761467.html
Copyright © 2011-2022 走看看