昨天写了篇文字《static变量与asp.net 》,说到Application与static member的区别的时候,提到了Application对象的线程安全方面的问题。《线程同步问题:static成员与ASP.NET中的Application对象 》提出了进一步的讨论。今天我又想将昨天没有说清楚地这一部分不补上
       Application对象使用了一个字典来保存所有的对象。对每个对象的读写都会加锁。他的锁分为读与写两种。该锁内部维护了一个int字段。加读锁时等待该变量不为-1(没有处于写状态),将该变量加1,解读锁时将改变量减一;加写锁时等待该变量为0(表示没有任何对象锁定),将该变量赋值为-1,解写锁时将改变量赋值为0。很明显对这个变量的操作是要加排他锁的。
       这样的结果就是:一个Application对象处于写状态时,会拒绝其他Application对象的读、写操作;一个Application对象处于读状态时,会拒绝其他Application对象的写操作;即便两个Application对象可以同时读,但他们读操作中,加读锁的动作是排他的。
       Application对象使用过程中,加锁的动作会增加不少的性能损失。而不同的Application对象之间的阻塞,也会增加不少损失。
       而对于static member,一般情况下读不用作加锁操作。写的时候需要加锁,但一般也不会影响到其他的static member。

转载于:https://www.cnblogs.com/Meyer/archive/2004/04/28/7975.html

Application与线程同步相关推荐

  1. C#中的线程(二) 线程同步基础

    1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...

  2. DLL内线程同步主线程研究(子线程代码放到主线程执行)

    DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...

  3. 线程同步与异步套接字编程

    1.利用事件对象来实现线程间的同步 新建一个win32 console application,取名Event,再建一个Event源文件,编辑: #include <iostream.h> ...

  4. VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))

    目录 ​​​​​​​​​​​​ 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...

  5. 线程基础篇-线程同步

    Lock是将一段代码定义为临界区,临界区中的代码在同一时刻只能有一个线程访问,当临界区代码执行时,其他线程调用会被阻塞,需等待资源释放. 语法: private object locker=new o ...

  6. 01 线程同步机制封装类

    01 线程同步机制封装类 RAII RAII全称是"Resource Acquisition is Initialization",直译过来是"资源获取即初始化" ...

  7. C#线程同步(3)- 互斥量 Mutex

    什么是Mutex "mutex"是术语"互相排斥(mutually exclusive)"的简写形式,也就是互斥量.互斥量跟临界区中提到的Monitor很相似, ...

  8. C#中的线程(中)-线程同步

    1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...

  9. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

最新文章

  1. GPU服务器选购指南-思腾合力篇
  2. 编写程序,输入某年某月,求该月有多少天
  3. 撕起来了!谁说数据少就不能用深度学习?这锅俺不背!
  4. CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!
  5. ACM入门之【DP】
  6. java io效率_JAVA IO操作的总结 和速度实验
  7. boost::fusion::as_deque用法的测试程序
  8. htmlcss基础知识点表单
  9. LeetCode 2062. 统计字符串中的元音子字符串
  10. [Java] 蓝桥杯ALGO-146 算法训练 4-2找公倍数
  11. ​每一页都是知识点,这本Flutter企业级实践指南太绝了
  12. 我为什么憎恨Framework
  13. 凯恩帝数控系统面板介绍_KND凯恩帝数控系统说明书.doc
  14. starlink卫星轨道预报
  15. win7设置自动关机
  16. Android与H5相互接口调用及Android端接口整理
  17. 零基础无经验,该怎么学编程,要学多久?
  18. 瑞星微RK3288 开发板(ARM Cortex-A17架构)
  19. 表达式求值问题数据结构课程设计
  20. 微信订阅号申请流程及准备材料

热门文章

  1. 容器重启后配置失效问题
  2. day16-小数据池
  3. WebSphere Application Server中manageprofiles的使用
  4. Webpack 打包学习
  5. ES6里的修饰器Decorator
  6. Web纯前端“旭日图”实现元素周期表
  7. 关于Could not parse configuration: /hibernate.cfg.xml的问题
  8. Photoshop 混色模式学习
  9. 判断一个数是否是2的倍数----------面试算法
  10. Android 布局开发之百分比布局、弹性布局