A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 杨占伟 中级黑马   /  2012-12-4 23:40  /  1496 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨占伟 于 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();该怎么处理?



评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

3 个回复

倒序浏览
Application对象是所有全站用户共用的,有可能冲突导致数据丢失的,如果不加锁会有并发性问题

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
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"]被释放,然后再访问这个数据,同时将资源上锁。后面的用户同样这样处理。这里因为存在资源的并发访问,所以必须对其加锁,不是性能的问题。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
非常感谢~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马