当前位置: 首页 > 编程语言 > C#

C#中的方法锁分享

时间:2023-04-10 19:21:53 C#

C#中的方法锁我有一个类有这三个方法。许多多线程使用这个类。如果Method2和/或Method3在任何线程中运行,我希望Method1等待。有什么建议么?publicclassClass1{publicstaticvoidMethod1(){ObjectlockThis=newObject();lock(lockThis){//Bodyfunction}}publicstaticvoidMethod2(){//Bodyfunction}publicstaticvoidMethod3(){//Bodyfunction}}如果我没理解错的话,你需要这样的东西:staticobjectlockMethod2=新对象();静态对象lockMethod3=newobject();publicstaticvoidMethod1(){lock(lockMethod2)lock(lockMethod3){//主体函数}}publicstaticvoidMethod2(){lock(lockMethod2){//主体函数}}publicstaticvoidMethod3(){lock(lockMethod3){//Bodyfunction}}这允许method3在method2运行时执行,反之亦然,而method1必须等待两者。当然,当1运行时,方法2和3不会运行。当前的锁实现完全没有用,因为每个线程都会锁定不同的对象。锁定通常是用只初始化一次的只读字段完成的。像这样你可以轻松锁定多个方法:publicclassClass1{privatestaticreadonlyobject_syncRoot=newobject();publicstaticvoidMethod1(){lock(_syncRoot){//主体函数}}publicstaticvoidMethod2(){lock(_syncRoot){//主体函数}}publicstaticvoidMethod3(){lock(_syncRoot){//Bodyfunction}}}我推荐使用ReaderWriterLockSlim(http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx)类似于读取操作,方法2和方法3可以并行发生,而Method1(如写操作)需要等待它们完成。这不是常规的读写并发情况,但逻辑是类似的。publicclassClass1{privateReaderWriterLockSlimmethodLock=newReaderWriterLockSlim();publicstaticvoidMethod1(){methodLock.EnterWriteLock();try{//主体函数}finally{methodLock.ExitWriteLock();}}publicstatic2(void)methodLock.EnterReadLock();try{//正文函数}finally{methodLock.ExitReadLock();}}publicstaticvoidMethod3(){methodLock.EnterReadLock();try{//主体功能}finally{methodLock.ExitReadLock();}}}如果是多线程,那么所有线程都必须能够访问锁。所以在这种情况下,你的锁需要是静态的,静态方法才能看到它。您当前的设置将为每个线程创建一个新的锁对象。因此,现在提供同步。以上就是C#学习教程:c#中的方法锁共享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: