• 锁的深入理解


    关于“互斥”和“同步”的概念
    • 互斥就是线程A访问了一组数据,线程BCD就不能同时访问这些数据,直到A停止访问了
    • 同步就是ABCD这些线程要约定一个执行的协调顺序。比如D要执行,B和C必须都得做完,而B和C要开始,A必须先得做完。
    这是两种典型的并发问题。恰当的使用锁,可以解决同步或者互斥的问题。
    锁的目的就是避免多个线程对同一个共享的数据并发修改带来的数据混乱。
    锁的实现要处理的大概就只有这4个问题:
    • “谁拿到了锁(临界区)“这个信息存哪里(可以是当前class,当前instance的markword,还可以是某个具体的Lock的实例)
    • 谁能抢到锁的规则(只能一个人抢到 - Mutex;能抢有限多个数量 - Semaphore;自己可以反复抢 - 重入锁;读可以反复抢到但是写独占 - 读写锁……)
    • 抢不到时怎么办(抢不到玩命抢;抢不到暂时睡着,等一段时间再试/等通知再试;或者二者的结合,先玩命抢几次,还没抢到就睡着)
    • 如果锁被释放了还有其他等待锁的怎么办(不管,让等的线程通过超时机制自己抢;按照一定规则通知某一个等待的线程;通知所有线程唤醒他们,让他们一起抢……)
  • 相关阅读:
    学习 WCF (6)学习调用WCF服务的各种方法
    WCF 基础简介
    Ext.form 表单为什么第二次就不正常显示
    面向对象
    学习 WCF (4)学会使用配置文件
    临危不乱,.Net+IIS环境经常出现的问题及排障。
    Java调用wcf
    Extjs 动态生成表格
    面向对象分析与设计的意义是什么
    WCF配置文件详解
  • 原文地址:https://www.cnblogs.com/findbetterme/p/11347145.html
Copyright © 2020-2023  润新知