欢迎来到天天文库
浏览记录
ID:20654367
大小:163.38 KB
页数:8页
时间:2018-10-14
《多线程的同步机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、多线程的同步机制同步机制,实际上是事件驱动机制,意思是让线程•〒•时处于“休眠”状态,除非发生某个事件才触发。例如一个拷W文件,拷W线程完成一个程序块后,再唤醒进程条线程做一个格的填充。研究多线程的同步机制的必要性在于,多线程同步工作吋,如果同吋调川相同的资源就可能会ill现闷题,一般读fH是不会有问题的,但是,如果写入(全局变量、数据库),就会发生冲突,甚至产生死锁和竞争M题。在.NET^I1,使川ReaderWriterLockO类來实现同步,它脊两个重要的方法:AcquireWriterLock(时间)在该时间内锁定线程;RcleascWriterLo
2、ck()释放锁定。合理的设计,就可以实现同步:下面是一个例子:实例二-MicrosoftVisualBasic.NET[设计]-Forml.vb[设计P
3、(5
4、x
5、文件d)编辐(i)视囝迮)项目(I〕生成⑧调试d〕数据⑷格式位)工具d)窗口⑴帮助㈤印▼适▼盛S®X®▼若1,專
6、►Debug▼邊ft
7、e专11啼*曲
8、SCHDS3卜把玫S
9、§K弒纪
10、@囹Q▼工具箱WindowsForms数据组件窗体終指针ALabelALinkLabel•t>
11、ButtonRbiTextBoxMainMenupCheckBoxRadioButtonxvGroupBoxPictur
12、eBoxL]P^nelDataGrid•:.kr>•..笫规起始页Forml.vb[设计]*Forml.vb*解决方案资源管理器...9X岡旧丨®I©解决方案例二w(1项目tl1^1实例二申…引用AssemblyInfo.vb3Forml.vbJM3解…丨习类."Il索••I尾性Button1System.Windows.Ij^JZ3@1国]%服务器...分工具箱IImagelndex
13、
14、(none)A
15、ImageList(无)RightToLeftNoText开始Ljj中j%國简^命I2JTl分7U衣LJ納□□I■!索引结果(搜索项自定义控件,绘囝和呈现)
16、-找到1个主题
17、Eff馬性O动态帮助I输出就结孕XText控件中包含的文本。讀开始
18、
19、j1^1计戈记亊本
20、」第二童钱程
21、酌多浅程编程."
22、卽文挡3-Mil11⑺实例二-Mie•丁网i面酵関11:14’新添加的一个命名空间。ImportsSystem.ThreadingPublicClassFormlInheritsSystem.Windows.Forms.FormDimrwlAsNewReciderWriterLock()DimthdProduceAsThreadDimthdConsumeAsThreadDimmJCounterAsInteger’生产者线程
23、函数SubThreadProduceOWhileTrue’使用超时值获取阅读锁,Timeout.IriHrii为无限长等待超时时间rwl.AcquireWriterLock(Timeout.Infinite)WhilemiCounter<300ra.iCountcr+=1labProduce.Text=m_iCounter.ToStringOThread.Sleep(10)EndWhile’释放阅读锁rwl.RolcascWritcrLock()EndWhileEndSub’消费者线程函数SubThrcadConsumc()WhileTruerwl.Acqu
24、ireReaderLock(Timeout.Infinite)Whilem_iCountcr>0m_iCounter-=1labConsume.Text=miCounter.ToStringOThread.Sleep(10)EndWhilerwl.KeleaseKeaderLock()EndWhileEndSub’庐动线程的运行。PrivateSubButtonl_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButtonl.ClickButtonl.Enabled=Fals
25、eButton2.Enabled=TruethdProduce=NewThread(NewThreadStart(AddressOfThreadProduce))thdConsume=NewThread(NewThreadStart(AddressOfThreadConsume))thdProduce.Start()thdConsume.Start0EndSubPrivateSubForml_Closing(ByValsenderAsObject,ByValcAsSystem.ComponcntModcl.CancclEvcntArgs)HandlesMyB
26、ase.Closing’释放锁,而不管线程取锁的次数
此文档下载收益归作者所有