Mutex,Monitor,lock,MethodImplAttribute,SynchronizedAttribute的用法差异

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1)Mutex:进程之间的同步(互斥量)。

2)lock/Monitor……:线程同步。其中lock是Monitor的简化版本(直接生成try{Monitor.Enter(……)}finally{Monitor.Exit(……);}方法。

当然,Monitor还有Pulse方法,该方法对于锁定同一个对象的时候,允许其它线程进入准备区,同时配合Wait方法(Wait将自己暂时退出)。某种情况下可以代替信号量(ManualResetEvent),考察以下例子(来源:http://bbs.csdn.net/topics/380095508):

classMyManualEvent

{PRivateobjectlockObj =newobject();privateboolhasSet =false;publicvoidSet()

{lock(lockObj) //排队准备领到开锁的钥匙

{

hasSet=true;

Monitor.PulseAll(lockObj); //通知其他排队人先拿钥匙开锁

}

}publicvoidWaitOne()

{lock(lockObj) //排队准备领取开锁的钥匙

{while(!hasSet)

{

Monitor.Wait(lockObj); //等通知,这样可以拿到钥匙开锁了

}

}

}

}classProgram

{staticMyManualEvent myManualEvent =newMyManualEvent();staticvoidMain(string[] args)

{

ThreadPool.QueueUserWorkItem(WorkerThread,"A");

ThreadPool.QueueUserWorkItem(WorkerThread,"B");

Console.WriteLine("Press enter to signal the green light");

Console.ReadLine();

myManualEvent.Set();

ThreadPool.QueueUserWorkItem(WorkerThread,"C");

Console.ReadLine();

}staticvoidWorkerThread(objectstate)

{

myManualEvent.WaitOne();

Console.WriteLine("Thread {0} got the green light...", state);

}

}

3)MethodImpl:是一个特性,在System.Runtime.CompilerServices下,等同于lock。在作用于一个类方法的时候=lock(this),作用于一个静态方法等同于lock(typeof(某个类))。

4)SynchronizedAttribute(在System.Runtime.Remoting.Contexts命名空间下)。用于多个程序域实例化某个类,使得该类的数据和方法都可以被同步(单个程序域也可以)。

值得注意的是:WaitHandler的WaitOne方法第二个参数在这里起作用。

示例代码:

namespaceConsoleapplication1

{[Synchronization(true)]classMy:ContextBoundObject{staticvoidMain(string[] args)

{

My my=newMy();

ThreadPool.QueueUserWorkItem(my.FuncA);

ThreadPool.QueueUserWorkItem(my.FuncA);

Console.ReadLine();

}

AutoResetEvent myEvent=newAutoResetEvent(false);publicvoidFuncA(objectstate)

{

Console.WriteLine("Thread id is:"+Thread.CurrentThread.ManagedThreadId);

myEvent.WaitOne(2000,false);//改成true你发现会有第二个线程突然插入并执行Console.WriteLine("=======");

}

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航