多线程同步加锁实现共享_第1页
多线程同步加锁实现共享_第2页
多线程同步加锁实现共享_第3页
多线程同步加锁实现共享_第4页
多线程同步加锁实现共享_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.NET中多线程间资源共享与访问本文详细地描述一个定制的.NET类ThreadLockHelper(该类能在多线程环境下有效地共享资源),同时提供了.NET下多线程中资源共享及同步技术的概述。其helper类,将会帮助并简化.NET框架下高级程序员们对多线程的使用...§§翻译vinodramakrishnan著Managingsharedresourceaccessin.NETmulti-threading简介本文详细地描述一个定制的.NET类ThreadLockHelpe(该类能在多线程环境下有效地共享资源),同时提供了.NET下多线程中资源共享及同步技术的概述。文中给出的helper类,将会帮助并简化.NET框架下,高级程序员们对多线程的使用。本文也讲述如何在多线程之间同步资源的访问。本文将引导你:使用.NET线程threading模型在访问共享资源时,设计一个更好的加锁机制。设计并实现复杂多线程的解决方案。我们假设你比较属性.NET开发组件,和基本的线程机制。内容概述在多线程中访问共享资源。设计和实现ThreadLockHelper类。使用ThreadLockHelper类的示例程序。总结在多线程中访问共享资源概述使用多线程技术,可以使一个.NET程序同时执行多个任务。多线程允许你同时开启多个线程,分别执行不同任务;还能够提高程序的性能和响应时间。因为多线程能够同时访问资源,所以最好在多线程间进行同步。当一个程序运行在多线程环境下的时候,它需要确保当一个线程挂起的时候,不应该还占用着对象(资源)。线程安全的基本含义是:当多线程同时访问时,对象的成员总是管理着一个有效状态,确保它们不会冲突。.NET提供了不同的同步机制,以管理多线程的线程安全。locklock是一个关键字,它通过给一个对象加锁,执行语句,解锁,把一段语句标志为临界区。示例代码lock(obj){//codetobelockedwillgohere}MonitorMonitor:Monitor类是用来同步实例中的方法或静态的方法。这个方法要依赖于一个object,也就是说,它不是在如int或string之类的值上加锁。该临界区通过调用Monitor.Enter()建立,并通过Monitor.Exit()释放。示例代码:try{ Mon~j);} /…b…心1奕here:lnally}M~obj);Mutex当位于进程之内或之间的线程需要访问操作系统的资源的时候,需要一个控制机制来限制资源访问的冲突。System.Threading.Mutex是一个继承于WaitHandle的类,它必须实现一个信号量机制表明排他地占用或释放资源。同一时间,只能有一个线程占用Mutex。在访问资源之前,每个线程都通过发信号,以获得Mutex的控制权。此后,线程还必须等待资源的控制权。当线程完成操作时,通过ReleaseMutex()发出完成信号(lock和Monitor对于unmanaged资源是不起作用的)。示例代码:MutexobjMutex=newMutex(false,"ThreadLock");objMutex.WaitOne();//codetobelockedwillgohereobjMutex.ReleaseMutex();ThreadLockHelper 类的设计和实现ThreadLockHelper类ThreadLockHelperclassisasingletonimplementationandonlyoneinstancewillbetakingcareoflockingthreadsforaprocesstobeexecuted.ThreadLockHelper类需要的命名空间usingSystem;usingSystem.Threading;///<summary>///一个静态的用于对managed/unmanaged资源进行加锁的类///</summary>publicclassThreadLockHelper(staticThreadLockHelpermInstance=null;MutexmMutex=null;privateThreadLockHelper()(}publicstaticThreadLockHelperGetInstance()(if(mInstance==null)(mInstance=newThreadLockHelper();mInstance.mMutex=newMutex(false,"ThreadLock");}return(mInstance);}publicboolCreateLock()"…==顽1-mMutex=newMutex(false,"ThreadLock");—;g……g,…_);调用示例程序在进程执行前创建一个ThreadLockHelper锁,在执行后,释放。publicclassActivity(publicvoidInvokeTask()(TaskobjTask=newTask();ThreadLockHelper.GetInstance().CreateLock();objTask.DoTask();ThreadLockHelper.GetInstance().ReleaseLock();}}上面的程序中,objTask.DoTask()操作用于访问一个共享的资源(例如:调用一个web服务完成某些功能)如果你在不同的线程中调用了上面的InvokeTask()方法,示例如下:ActivityobjActivity=null;ThreadthdInvokeTask;for(inti=1;i<100;i++)(objActivity=newActivity();thdInvokeTask=newThread(newThreadStart(objClsThread.InvokeTask));}在上面的场景中,如果你不采用加锁机制,应用程序就会因线程退出异常(threadabortexception)失败。你可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论