Application与线程同步

        昨天写了篇文字《static变量与asp.net 》,说到Application与static member的区别的时候,提到了Application对象的线程安全方面的问题。《线程同步问题:static成员与ASP.NET中的Application对象 》提出了进一步的讨论。今天我又想将昨天没有说清楚地这一部分不补上wink_smile.gif
       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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值