ASP.NET网页编程之.NET中多线程的同步资本会见
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。在使用程序中利用多个线程的一个优点是每一个线程都能够异步实行。关于Windows使用程序,耗时的义务能够在背景实行,而使使用程序窗口和控件坚持呼应。关于服务器使用程序,多线程处置供应了用分歧线程处置每一个传进哀求的才能。不然,在完整满意前一个哀求之前,将没法处置每一个新哀求。但是,线程的异步特征意味着必需和谐对资本(如文件句柄、收集毗连和内存)的会见。不然,两个或更多的线程大概在统一工夫会见不异的资本,而每一个线程都不晓得其他线程的操纵。了局将发生不成预知的数据破坏。让我们先来看一片java的例子:多线程未同步大概招致的成绩及其办理计划
上面是C#的代码
transfer办法
publicvoidtransfer(intfrom,intto,doubleamount){
if(accounts<amount)return;
Console.WriteLine(System.Threading.Thread.CurrentThread.Name);
accounts-=amount;
Console.WriteLine("{0:F2}from{1}to{2}",amount,from,to);
accounts+=amount;
Console.WriteLine("TotalBalance:{0:F2}",getTotalBalance());
}run办法
publicvoidrun(){
Randomrand;
try{
while(true){
rand=newRandom();
inttoAccount=rand.Next(bank.size);
doubleamount=rand.NextDouble()*maxAmount;
bank.transfer(fromAccount,toAccount,amount);
System.Threading.Thread.Sleep(rand.Next(DELY));
}
}
catch{}
}
这个成绩在.net中一样存在,关于.net有上面几中办理计划能够确保平安的实行多线程处置:
1)lock关头字
2)监督器
3)同步事务和守候句柄
4)Mutex工具
这里我们只说一下利用lock关头字,假如必要更多信息,请会见msdn:
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/413e1f28-a2c5-4eec-8338-aa43e7982ff4.htm
lock关头字能够用来确保代码块完成运转,而不会被其他线程中止。这是经由过程在代码块运转时代为给定工具猎取互斥锁来完成的。
lock语句以关头字lock开首,它有一个作为参数的工具,在该参数的前面另有一个一次只能由一个线程实行的代码块。比方:
publicvoidFunction()
{
System.ObjectlockThis=newSystem.Object();
lock(lockThis)
{
//Accessthread-sensitiveresources.
}
}
修正run办法
publicvoidrun(){
Randomrand;
try{
while(true){
lock(bank){
rand=newRandom();
inttoAccount=rand.Next(bank.size);
doubleamount=rand.NextDouble()*maxAmount;
bank.transfer(fromAccount,toAccount,amount);
System.Threading.Thread.Sleep(rand.Next(DELY));
}
}
}
catch{}
}利用lock关头字锁住了bank工具的实例,lock确保当一个线程位于代码的临界区时,另外一个线程不进进临界区。假如其他线程试图进进锁定的代码,则它将一向守候(即被制止),直到该工具被开释.
这里利用lock必要注重的是:
应制止锁定public范例,不然实例将超越代码的把持局限。罕见的布局lock(this)、lock(typeof(MyType))和lock("myLock")违背此原则:
1.假如实例能够被大众会见,将呈现lock(this)成绩。
2.假如MyType能够被大众会见,将呈现lock(typeof(MyType))成绩
3.因为历程中利用统一字符串的任何其他代码将共享统一个锁,以是呈现lock(“myLock”)成绩.
就我团体而言,我以为多线程假如要会见共享数据必需同步
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而java是公开了。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 那么,ASP.Net有哪些改进呢? 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
页:
[1]