c#怎样使用锁互斥锁?

 我来答
若以下回答无法解决问题,邀请你更新回答
郑凯zkm
推荐于2019-08-14 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:67.3万
展开全部
多线程同步
实现线程的同步有几种方法: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[]通知正在等待的线程已发生事件橘芦凯。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式