• C#-线程


    • 多线程
    通常一个应用就是一个进程,进程中一般是一个线程,执行一个操作,其他操作等待。多线程,看起来是一个进程,有多个线程同时运行,互相不必等待,实际是把cpu的空闲时间利用起来,cpu在多个线程间不断切换。同时,加快进程的响应时间。
    • 创建线程
    用threadStart委托类,这委托.net已声明,她的实例代表一个执行指定方法的线程
    Thread tr = new Thread(new  threadStart(threadStart委托类对应的方法名,即希望新线程执行的方法));threadStart委托返回一个可转换为线程的对象。
    tr.start();
     
    • 管理多线程的多个类
    线程执行有不确定性,但可以在一定程度进行管理和控制。
    lock(moniter的简要写法)
        lock(this当前线程中的对象){这里的代码,只能this用,this用过后,其他线程的对象用}
    interlock类。专用于对递增递减变量的独占访问。
        Thread.interlock.decrement(需要递减的变量)
        Thread.interlock.increment(需要递增的变量)
    moniter类。比lock有更多的操作,如wait(等待),puls(释放临界资源给下一个线程),pulsAll(释放临界资源给所有线程)之类的操作。
        moniter.Enter开始独占
        moniter.exit释放独占
    mutex类。当需要在临界区,需要在线程间通信时使用。
    • 解决死锁
    死锁。线程A独占资源1,需要资源2继续执行,线程B独占资源2,需要资源1继续执行。
    为了避免,独占时,所有资源尽量一起独占。独占时,用尝试独占方法,如moniter.tryEnter(),不成功时,就释放已独占资源。
    • 线程间依赖,竞态条件,线程A需要线程B先执行,但线程A先执行了。
    为了避免,尽量不把有先后顺序的分到多个线程,如果分到了多个线程,尽量用Thread.Join()方法,让线程A等待线程B执行完成。
    • 共享线程
    可不创建线程,直接使用操作系统提供25个线程,在线程池,可跨进程使用,但性能比自己创建的进程低。
    用类
  • 相关阅读:
    打印一个对象的所有的属性及值
    创建oracle定时任务定时任务并没有按时执行
    查看ORACLE用户链接数
    Charles抓包工具一站式指南
    kafka问题排查
    iOS开发笔记 isKindOfClass和isMemberOfClass的区别
    HONOR使用日记
    使用系统自带的恢复功能进行重置
    根据端口查看进行PID 并杀掉进程
    HONOR 偏好设置
  • 原文地址:https://www.cnblogs.com/yinlg/p/4904750.html
Copyright © 2020-2023  润新知