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
分享到:
相关推荐
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt ...浅述WinForm多线程编程与Control.Invoke的应用.txt 微软.Net开发中的多线程编程总结.txt 线程中的参数传递.txt
VB.NET多线程编程技术--大量提高应用程序的性能[收集].pdf
vb.net2010数据库编程基础教程-数据绑定,使用控件方式连接数据库,图文教程
VB.NET判断网络连接状态
VB.NET应用教程第2版-童爱红-数据包 书本内的全部代码!
用VB.NET写的小计算器,之前看到一个,不过发现那个BUG挺多的,就自己写了一个,呵呵,仅供参考。打开里面的Caculate.vbproj文件,即可看到源代码。
使用VB.NET对PLC进行读写数据,方便快捷,对入门者有很好的编程
第8章-VB.NET与数据库应用程序10-10-25
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
VB.net设计模式高级编程这本书的源码,网上已经找不到,特发出来共享。
vb.net多线程例子 ,创建了三个方法:TestMethod1, TestMethod2和TestMethod13,并且这三个方法功能相似,通过循环向输出设备输出
VB.NET实例解析应用编程 VB.NET实例解析应用编程 VB.NET实例解析应用编程
Developers guide to ASP.NET
第一部分 Visual Basic.net基础 第二部分 vb.net的语法部分 第三部分 visual basic.net的运算 第四部分 visual basic.net的常用控件 第六部分 vb.net的OOP...第八部分 vb.net的多线程 第九部分 vb.net的文件和出错处理
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
VB.NET之SerialPort编程实例源码 直接使用
vb.net控件应用编程实例教程vb.net控件应用编程实例教程vb.net控件应用编程实例教程
VB.NET多线程编程 对于VB.NET的多线程进行了比较详细的解释
VB.NET高级篇教程
vb.net和sol server2000高级编程-创建高效数据层