NET网页编程之C#多线程中lock的用法
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而java是公开了。常常碰着同时必要对某个数据举行操纵,大概对某个文件举行读写操纵,关于这些操纵我们之前常常不克不及很好的举行处置,自从C#言语中引进了lock这个关头字,以上成绩就对照简单予以办理了,上面就是一段复杂的代码。publicclassAccessControl()
{
privatestaticobjectprivateObjectLock=newobject();
publicstaticAccessResult()
{
lock(privateObjectLock)
{
//数据操纵语句www.elvin.com
}
}
}
C#多线程中lock的用法
在做邮箱吸收网关的时分碰到了以下的需求,请求为每个邮箱开启一个吸收线程,从POP3服务器上收取,然后将邮件寄存到一致的FTP服务器上,请求邮件按收接顺充从1入手下手顺充编号。
我完成的办法为,为每一个邮箱new出实例,然后分离赋给POP3邮箱地点,用户名,暗码等参数。这里触及到一个编号同步的成绩,由于每一个吸收邮件的线程都是本人实行,以是获得编号而且递增这个举措是互斥的。
以一个静态变量暗示编号以下:
lassEmailInfo
{
publicstaticintCurrentNumber;
}
那在以后线程获得这个步骤为:
_CurrentNumber=++EmailInfo.CurrentNumber;
固然此为一句,但在盘算机运转时却分为多步,以下:
EmialInfo.CurrentNumber加1--EmailInfo.CurrentNumber前往值给_CurrentNumber,大概线程1实行了EmailInfo.CurrentNumber加1的操纵,但还没有获得前往值,此时线程2又实行了EmailInfo.CurrentNumber加1的操纵,然后又线程1,线程2获得了前往值就是一样的,如许就得到了按按次递增的感化。
此时查找了网上有关线程同步的办法,实在用lock语句锁住递增的那一段便可。而先容的相干用法为:
lock(this)
{
_CurrentNumber=++EmailInfo.CurrentNumber;
}
本觉得如许就能够乐成,谁晓得仍是有效,重复查找才发明没弄分明lock的用法。由于网上所讲的材料,举的例子对照复杂,是间接new出一个对像,然后为对像的一个函数创立了多个线程运转,以是它的同步只需lock住this即它本人就好了。由于此时只要一个实例在运,而我是new出了多个对像,lock住每一个本人的实例以是固然有效。
以是天然想了一个办理办法,就lock住不异的一个实例就好了。由于我每一个邮件吸收线程的参数都是分歧的,以是仍是new出几个实像,但lock的办法改成以下:
先为EmailInfo加一个静态变量
classEmailInfo
{
publicstaticobjectsyncRoot=newobject();
publicstaticintCurrentNumber;
}
然后lock改成:
lock(EmailInfo.syncRoot)
{
_CurrentNumber=++EmailInfo.CurrentNumber;
}
便可完成想要的效果了。
你觉得数据库怎么样? 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
页:
[1]