首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

VB.NET并行与分布式编程(六)-线程与内核同步[17]

2012-09-14 
VB.NET并行与分布式编程(6)-线程与内核同步[17]ReaderWriterLockSlim.EnterUpgradeableReadLock 方法Impor

VB.NET并行与分布式编程(6)-线程与内核同步[17]

ReaderWriterLockSlim.EnterUpgradeableReadLock 方法Imports SystemImports System.ThreadingImports System.DiagnosticsImports System.Diagnostics.ThreadStateModule Module1 Dim myLock As New ReaderWriterLockSlim() Dim jg As Double = 300 Sub Main() Dim mythread1 As Thread Dim mythread2 As Thread Dim mythread3 As Thread '创建线程对象 mythread1 = New Thread(AddressOf mythreadrun) mythread2 = New Thread(AddressOf mythreadrun) mythread3 = New Thread(AddressOf mythreadread) mythread1.Name = "thread_1" mythread2.Name = "thread_2" mythread3.Name = "thread_3" Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程") Dim myprocess As Process = Process.GetCurrentProcess() Console.WriteLine("进程名称:" & myprocess.ProcessName) '执行线程 mythread3.Start() mythread2.Start() mythread1.Start() '等待线程完成 mythread1.Join() mythread2.Join() mythread3.Join() '线程执行完毕 Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!") End Sub Public Sub mythreadrun() Dim mynum As Double Try For mynum = 1 To 100 '等待升级锁 Console.WriteLine(Thread.CurrentThread.Name & "===>" & Now.ToLongTimeString & "等待获得升级锁") If myLock.TryEnterUpgradeableReadLock(3) Then '获得升级锁 Console.WriteLine(Thread.CurrentThread.Name & " 获得升级锁") '获得写锁,执行升级处理 myLock.EnterWriteLock() jg -= mynum Console.WriteLine(Thread.CurrentThread.Name & "获得写锁==>" & Now.ToLongTimeString & "=>" & (jg + mynum) & "-" & mynum & ",计算结果为:" & jg) Thread.Sleep(13) '退出写锁 myLock.ExitWriteLock() Console.WriteLine(Thread.CurrentThread.Name & "退出写锁==>" & Now.ToLongTimeString) '退出升级锁 myLock.ExitUpgradeableReadLock() Console.WriteLine(Thread.CurrentThread.Name & "退出升级锁==>" & Now.ToLongTimeString) If jg < 0 Then Exit For End If Else Console.WriteLine(Thread.CurrentThread.Name & "获得升级锁失败") End If Thread.Sleep(16) Next Catch Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程异常终止!") '终止线程 Thread.CurrentThread.Abort() Finally Console.WriteLine(Thread.CurrentThread.Name & "优先级: " & Thread.CurrentThread.Priority.ToString) Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程运行完毕!") End Try End Sub Public Sub mythreadread() While jg > 0 '获得升级锁 Console.WriteLine(Thread.CurrentThread.Name & "===>" & Now.ToLongTimeString & "等待获得升级锁...") If myLock.TryEnterUpgradeableReadLock(5) Then Console.WriteLine(Thread.CurrentThread.Name & " 获得升级锁" & Now.ToLongTimeString) '获得读锁,执行降级处理 If myLock.TryEnterReadLock(5) Then '退出升级锁 Console.WriteLine(Thread.CurrentThread.Name & " 退出升级锁" & Now.ToLongTimeString) Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & " 获得读锁,当前计算值为{0}", jg) myLock.ExitUpgradeableReadLock() Thread.Sleep(15) myLock.ExitReadLock() Console.WriteLine(Thread.CurrentThread.Name & " 退出读锁和升级锁" & Now.ToLongTimeString) Else Console.WriteLine(Thread.CurrentThread.Name & " 获得读锁失败" & Now.ToLongTimeString) End If Else Console.WriteLine(Thread.CurrentThread.Name & " 获得升级锁失败" & Now.ToLongTimeString) End If Thread.Sleep(10) End While End SubEnd Module

?效果如下:

?


VB.NET并行与分布式编程(六)-线程与内核同步[17]
?

热点排行