`
deepfuture
  • 浏览: 4333536 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79428
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68376
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101498
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281206
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14608
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65559
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31320
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45206
社区版块
存档分类
最新评论

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)  尝试进入写入模式锁定状态,可以选择超时时间。 

 

 

效果如下:

 



 

  • 大小: 86.8 KB
2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics