c#怎样使用锁互斥锁
1个回答
展开全部
多线程同步
实现线程的同步有几种方法:lock、Mutex(互斥)、Monitor、Semaphore(信号灯)、interlocked和ReaderWriterLock等。
同步策略也可以分为同步上下文、同步代码区、手动同步等。
同步上下文:主要依靠SynchronizationAttribute类来实现。
(所有在同一个上下文域的对象共享同一个锁。这样创建的对象实例属性、方法和字段就具有线程安全性,但是类的静态字段、属性和方法不具有线程安全性。)
同步代码区:lock(){}、Monitor.Enter();Monitor.Exit()(Monitor.wait();Monitor.pulse());
手动同步:使用不同的同步类来创建自己的同步机制
ReaderWriterLock支持单个写线程和多个读线程的锁。在任一特定时刻允许多个线程同时进行读操作或者一个线程进行写操作,用它进行读写同步比使用监视的方式(如Monitor)效率要高。
WaitHandle类中SignalAndWait、WaitAll、WaitAny及WaitOne这几个方法都有重载形式,其中除哗正WaitOne之外都是静态的。WaitHandle方法常用作同步对象的基类。WaitHandle对象通知其他的线程它需要对资源排他性的访问圆唤,其他的线程必须等待,直到WaitHandle不再使用资源和等待句柄没有被使用。
WaitHandle方法有多个Wait的方法,这些方法的区别如下:
WaitAll:等待指定数组中的所有元素收到信号。
WaitAny:等待指定数组中的任一元素收到信号。
WaitOne:当在派生类中重写时,阻塞当前线程,直到当前的 WaitHandle 收到信号。
这些wait方法阻塞线程直到一个或者更多的同步对象收到信号。
ManualResetEvent通知一个或者多个正在等待的线程已发生事件。
AutoResetEvent[]通知正在等待的线程已发生事件橘芦凯。
实现线程的同步有几种方法:lock、Mutex(互斥)、Monitor、Semaphore(信号灯)、interlocked和ReaderWriterLock等。
同步策略也可以分为同步上下文、同步代码区、手动同步等。
同步上下文:主要依靠SynchronizationAttribute类来实现。
(所有在同一个上下文域的对象共享同一个锁。这样创建的对象实例属性、方法和字段就具有线程安全性,但是类的静态字段、属性和方法不具有线程安全性。)
同步代码区:lock(){}、Monitor.Enter();Monitor.Exit()(Monitor.wait();Monitor.pulse());
手动同步:使用不同的同步类来创建自己的同步机制
ReaderWriterLock支持单个写线程和多个读线程的锁。在任一特定时刻允许多个线程同时进行读操作或者一个线程进行写操作,用它进行读写同步比使用监视的方式(如Monitor)效率要高。
WaitHandle类中SignalAndWait、WaitAll、WaitAny及WaitOne这几个方法都有重载形式,其中除哗正WaitOne之外都是静态的。WaitHandle方法常用作同步对象的基类。WaitHandle对象通知其他的线程它需要对资源排他性的访问圆唤,其他的线程必须等待,直到WaitHandle不再使用资源和等待句柄没有被使用。
WaitHandle方法有多个Wait的方法,这些方法的区别如下:
WaitAll:等待指定数组中的所有元素收到信号。
WaitAny:等待指定数组中的任一元素收到信号。
WaitOne:当在派生类中重写时,阻塞当前线程,直到当前的 WaitHandle 收到信号。
这些wait方法阻塞线程直到一个或者更多的同步对象收到信号。
ManualResetEvent通知一个或者多个正在等待的线程已发生事件。
AutoResetEvent[]通知正在等待的线程已发生事件橘芦凯。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询