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

ReaderWriterLockSlim类是.NET框架提供的一个轻量级的,写入托管代码中的能产生更优性能的锁

代码如下:

 

Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState











Module Module1

    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 mythreadrun)
        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)
        '执行线程
        mythread1.Start(myprocess)
        mythread2.Start(myprocess)
        mythread3.Start(myprocess)





        '等待线程完成
        mythread1.Join()
        mythread2.Join()
        mythread3.Join()


        '线程执行完毕
        Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!")

    End Sub
    Public Sub mythreadrun(ByVal myprocess As Object)
        Dim mynum As Double



        Static myLock As New ReaderWriterLockSlim()
        Static Dim jg As Double = 100
        Try
            For mynum = 1 To 10
                '在5毫秒内尝试获得写锁
                If myLock.TryEnterWriteLock(5) Then
                    jg -= mynum
                    Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>" & (jg + mynum) & "-" & mynum & ",计算结果为:" & jg)
                    '退出写锁
              Thread.Sleep(2)
                    myLock.ExitWriteLock()
                Else
                    Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>获得写锁失败")
                End If

            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
End Module

 

 上面用到的方法如下:

  TryEnterWriteLock(Int32)  尝试进入写入模式锁定状态,可以选择超时时间。 
  TryEnterWriteLock(TimeSpan)  尝试进入写入模式锁定状态,可以选择超时时间。 

  ExitWriteLock  减少写入模式的递归计数,并在生成的计数为 0(零)时退出写入模式。 

ReaderWriterLockSlim 类

表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。

相关方法如下:

Dispose  释放 ReaderWriterLockSlim 类的当前实例所使用的所有资源。 
  EnterReadLock  尝试进入读取模式锁定状态。 
  EnterUpgradeableReadLock  尝试进入可升级模式锁定状态。 
  EnterWriteLock  尝试进入写入模式锁定状态。 
  Equals(Object)  确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
  ExitReadLock  减少读取模式的递归计数,并在生成的计数为 0(零)时退出读取模式。 
  ExitUpgradeableReadLock  减少可升级模式的递归计数,并在生成的计数为 0(零)时退出可升级模式。 
  ExitWriteLock  减少写入模式的递归计数,并在生成的计数为 0(零)时退出写入模式。 
  Finalize  允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
  GetHashCode  用作特定类型的哈希函数。 (继承自 Object。)
  GetType  获取当前实例的 Type。 (继承自 Object。)
  MemberwiseClone  创建当前 Object 的浅表副本。 (继承自 Object。)
  ToString  返回表示当前对象的字符串。 (继承自 Object。)
  TryEnterReadLock(Int32)  尝试进入读取模式锁定状态,可以选择整数超时时间。 
  TryEnterReadLock(TimeSpan)  尝试进入读取模式锁定状态,可以选择超时时间。 
  TryEnterUpgradeableReadLock(Int32)  尝试进入可升级模式锁定状态,可以选择超时时间。 
  TryEnterUpgradeableReadLock(TimeSpan)  尝试进入可升级模式锁定状态,可以选择超时时间。 
  TryEnterWriteLock(Int32)  尝试进入写入模式锁定状态,可以选择超时时间。 
  TryEnterWriteLock(TimeSpan)  尝试进入写入模式锁定状态,可以选择超时时间。 

 

 

效果如下:

 


VB.NET并行与分布式编程(6)-线程与内核同步[15]_第1张图片
 

你可能感兴趣的:(VB.NET)