黑马程序员技术交流社区

标题: Application为什么要加锁? [打印本页]

作者: 杨占伟    时间: 2012-12-4 23:40
标题: Application为什么要加锁?
本帖最后由 杨占伟 于 2012-12-6 18:09 编辑

void Application_Start(object sender,EventArgs ea)
{
        Application.Lock();                //这里为什么加锁,这里不加锁行吗?
        Application["AllUser"] = 0;
        Application.UnLock;              //}
void Session_Start(object sender,EventArgs ea)
{
        Application.Lock();              //这里也是加锁,
        Application["AllUser"] = Convert.ToInt32(Application["AllUser]) + 1;
        Applicatiion.UnLock():
}
我对加锁的理解不知道对不对:
加锁是:每个用户都要等别人操作完才能操作,但是如果有5000个或者更多的用户同时访问该网站,那这样每个用户排队要排到什么时候?性能会不很低啊?
如果一个用户正在操作Application对象,Application处于Lock状态,那另一个用户再进入时碰到Application.Lock();该怎么处理?




作者: 李青    时间: 2012-12-6 13:57
Application对象是所有全站用户共用的,有可能冲突导致数据丢失的,如果不加锁会有并发性问题
作者: 刘亚龙    时间: 2012-12-6 14:40
application是对整个网站有效的,所有访问该网站的人使用同一个application。如果不对Application["AllUser"] 加锁,当有多个用户同时访问网站会有线程不同步的问题。
void Application_Start(object sender,EventArgs ea)
{
         Application.Lock();                //这里可以不加锁,Application_Start用于整个网站应用程序启动时触发,只执行一次
         Application["AllUser"] = 0;
         Application.UnLock;              //}
void Session_Start(object sender,EventArgs ea)
{
         Application.Lock();              //这里必须加锁,每有一个用户需要建立Session,该方法就会启动一次,多个用户同时访问的话,数据就会乱掉
         Application["AllUser"] = Convert.ToInt32(Application["AllUser]) + 1;
         Applicatiion.UnLock():
}
加锁之后每个用户的Session_Start方法执行时,都会检测Application["AllUser"]是否被锁住,如果锁住就等待Application["AllUser"]被释放,然后再访问这个数据,同时将资源上锁。后面的用户同样这样处理。这里因为存在资源的并发访问,所以必须对其加锁,不是性能的问题。
作者: 杨占伟    时间: 2012-12-6 18:10
非常感谢~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2