设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

Application与线程同步

作者:佚名 出处:网络转载 时间:05-28 点击:

内容载入中...
版权声明: 吴龙杰       昨天写了篇文字《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。
收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口
<< 上一篇 :static变量与asp.net
>> 下一篇 :static变量的同步

站长学院

推荐信息