




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c#多线程编程笔记3 a) 使用Mutex类Mutex是一个特殊的同步类,只能用来同步线程,不过Mutex可以跨进程对线程进行同步。Mutex类确保了一次只有一个线程可以访问同一资源。MSDN中的描述如下:“ Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。”对互斥体,MSDN有如下描述:“互斥体有两种类型:局部互斥体和已命名的系统互斥体。如果使用接受名称的构造函数创建 Mutex 对象,则该对象与具有该名称的操作系统对象关联。已命名的系统互斥体在整个操作系统中都可见,可用于同步进程活动。您可以创建多个 Mutex 对象来表示同一个已命名的系统互斥体,也可以使用 OpenExisting 方法打开现有的已命名系统互斥体。局部互斥体仅存在于您的进程内。您的进程中任何引用局部 Mutex 对象的线程都可以使用它。每个 Mutex 对象都是一个单独的局部互斥体。”例子4:using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace ConsoleApplication1 class mutex4 private static Mutex mut=new Mutex(); private const int numIterations = 1; private const int numTreads = 3; static void Main() Thread myThread = new Thread(new ThreadStart(MyThreadProc); myThread.Name = Thread; Thread myThread1 = new Thread(new ThreadStart(MyThreadProc); myThread1.Name = Thread1; Thread myThread2 = new Thread(new ThreadStart(MyThreadProc); myThread2.Name = Thread2; myThread.Start(); myThread1.Start(); myThread2.Start(); private static void MyThreadProc() for (int i = 0; i numIterations; i+) UseResource(); private static void UseResource() /mut.WaitOne(); Console.WriteLine(0 has entered the protected area,Thread.CurrentThread.Name); Thread.Sleep(500); Console.WriteLine(0 is leaving the protected arearn,Thread.CurrentThread.Name); /mut.ReleaseMutex(); 这个程序没有加入mut同步机制,运行结果如下:如果我们把mut.WaitOne()与mut.ReleaseMutex()前的/去掉,运行结果如下:可以看出,这样线程就完全按我们运行的顺序运行了!在这里值得一提的是Mutex.WaitOne有三种重载方法:Mutex.WaitOne();Mutex.WaitOne(int millisecondTimeOut,bool exitContext),Mutex.WaitOne(TimeSpan timeout,bool exitContext)其中第一参数是指超时的时间限止,第二个参数指定了线程在重新获取同步上下文之前是否需要先退出同步。例子5:using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace ConsoleApplication1 class mutexWaitOne5 static AutoResetEvent autoEvent = new AutoResetEvent(false); /AutoResetEvent 类表示一个本地等待处理事件,在释放了单个等待线程以后,该事件会在终止时自动重置。而ManualResetEvent在释放了单个等待线程之后只能手动重置 static void Main() Console.WriteLine(Main starting.); ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod),autoEvent);/Thread提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。WaitCallback(Method)表示线程池要回调的方法。autoEvent是传入WorkMethod的参数。 if (autoEvent.WaitOne(1000, false) Console.WriteLine(Work method signaled.); else Console.WriteLine(Timed out waiting for work method to signal.); Console.WriteLine(Main ending.); static void WorkMethod(object stateInfo) Console.WriteLine(Work starging.); int i = new Random().Next(100,2000); Console.WriteLine(the value of random is 0,i); Thread.Sleep(i); Console.WriteLine(Work ending.); (AutoRe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 顺丰小哥考试题库及答案
- 大学生宪法考试题库及答案
- 子宫腺肌症考试题及答案
- 2025年新疆糖料甜菜种植与种植户利益共享合同协议
- 地铁理论实操考试题及答案
- 2025年广西梧州市警(协警)招聘考试题库及答案
- 大数据分析项目供应商竞争合同
- 灵丘县招聘考试题及答案
- 口腔儿牙科考试题及答案
- 智能税务协同机制-洞察与解读
- 品质协议书范本
- 医院污水处理站服务外包项目投标方案(技术方案)
- 2024年全球及中国运动功能性针织面料行业头部企业市场占有率及排名调研报告
- 2025版预防接种规范
- 拆除清运合同协议
- 雨污合流管网改造工程施工组织设计
- 俱乐部账务管理制度
- 项目持续改进管理制度
- 成人重症患者颅内压增高防控护理专家共识(2024版)解读课件
- 钢网架结构同气膜结构方案比较
- 问诊流程及规范
评论
0/150
提交评论