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

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
分享到:
评论

相关推荐

    VB.Net-C#多线程Thread-代理委托delegate编程

    最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt ...浅述WinForm多线程编程与Control.Invoke的应用.txt 微软.Net开发中的多线程编程总结.txt 线程中的参数传递.txt

    新VB.NET源代码2023-11-18-16-40QZQ.zip

    6. **异步编程**:VB.NET提供了`Async`和`Await`关键字,用于编写非阻塞的异步代码,优化UI响应速度和资源利用率。 7. **错误处理**:使用`Try...Catch...Finally`语句进行异常处理,帮助开发者更好地控制程序运行...

    新VB.NET源代码2023-11-18-23-50QZQ.zip

    6. **异步编程**:VB.NET引入了`Async`和`Await`关键字,使得编写异步代码变得更加简洁,能够处理耗时的操作而不阻塞主线程。 7. **泛型**:VB.NET支持泛型,允许创建可重用的类型,这些类型可以使用多种数据类型。...

    VB.NET---计算器---源代码

    VB.NET是一种基于.NET框架的编程语言,由微软公司开发,是Visual Basic的现代版本,具有更强大的功能和更丰富的库支持。在这个项目中,“VB.NET---计算器---源代码”是一个使用VB.NET编写的简单计算器应用程序。它...

    VB.NET多线程编程技术--大量提高应用程序的性能[收集].pdf

    VB.NET多线程编程技术是一种提高应用程序性能的关键手段,尤其对于时间密集型或处理密集型的任务,它能够显著提升程序响应速度和资源利用效率。在VB.NET中,多线程编程主要依赖于`.NET框架`中的`System.Threading`...

    VB.NET判断网络连接状态--.txt

    VB.NET判断网络连接状态

    多线程-VB.net开发实例_vb.net多线程_

    在VB.NET编程环境中,多线程技术是一种提升应用程序性能的重要手段。它允许程序同时执行多个任务,从而提高程序的响应速度和效率。本实例主要关注如何在VB.NET中实现多线程,通过创建并运行三个具有类似功能的方法...

    VB.NET应用教程第2版-童爱红-数据包

    此外,VB.NET还支持XML处理、Web服务调用、多线程编程、反射以及与.NET Framework其他组件的集成,这些都是现代软件开发中不可或缺的部分。 总的来说,《VB.NET应用教程第2版》的数据包是学习VB.NET编程的宝贵资料...

    Vb.net-written-in--debugger.zip_.net_PLC VB.net_vb.net_vb.net pl

    使用VB.NET对PLC进行读写数据,方便快捷,对入门者有很好的编程

    VB.NET与VB编程方面的主要区别

    **VB.NET与VB编程方面的主要区别** VB.NET和Visual Basic(简称VB)是两种不同的编程环境,虽然它们在历史上有着紧密的联系,但随着时间的推移,两者之间的差异变得越来越明显。本文将深入探讨VB.NET与VB编程的主要...

    VB.net设计模式高级编程-构建强适应性程序源码

    VB.NET是一种面向对象的编程语言,由微软公司开发,它与.NET框架紧密集成,提供了丰富的库和工具支持,使得开发Windows桌面应用、Web应用以及服务变得更为便捷。设计模式在VB.NET中的应用,可以极大地提高代码质量和...

    VB.NET-gao-ji-jiao-cheng.rar_VB.NET 高级教程_VB.net教程_vb.net

    11. **多线程与并发**:VB.NET提供了Threading类库,用于处理多线程编程,以实现并行计算和优化性能。了解如何正确管理和同步线程是提高程序效率的关键。 这个高级教程涵盖了VB.NET的核心高级特性,通过深入学习,...

    VB.net编程实例(101个)

    VB.NET是一种基于.NET框架的编程语言,由微软公司开发,用于构建桌面应用、Web应用以及Windows服务等。这个“VB.net编程实例(101个)”集合为初学者提供了丰富的学习资源,涵盖了多个关键领域,包括Web开发、...

    VB.Net2010VB6转VB.Net(高清视频+源码).zip

    【VB.Net 2010 与 VB6 的差异与转换】 VB.Net 2010 是 Microsoft .Net Framework 下的一个编程环境,相较于之前的 VB6(Visual Basic 6.0),它引入了许多新特性和改进,旨在提升开发效率和代码质量。VB6 是基于...

    VB.NET实例解析应用编程100例

    《VB.NET实例解析应用编程100例》是一本深入探讨VB.NET编程实践的书籍,旨在帮助开发者通过具体的实例学习和掌握VB.NET编程技术。这本书可能涵盖了从基础语法到高级特性的广泛主题,包括控件使用、数据访问、网络...

    VB.Net.to.C.Sharp.Converter(VB.net转换成C#批量工具)

    VB.Net to C# Converter(代码转换工具) v2.23 VB.Net to C Sharp Converter 是一款将vb.net代码转化为c#代码的程序。在转化过程中,保留了原有的注释和变量名。 VB.Net to C# Converter是一款代码转换软件,将用户...

    AUTOCAD VBA&VB.NET开发基础与实例教程-3

    AUTOCAD VBA&VB.NET开发基础与实例教程 c#

    vb.net基础教程 - 编程入门网.pdf

    第一部分 Visual Basic.net基础 第二部分 vb.net的语法部分 第三部分 visual basic.net的运算 第四部分 visual basic.net的常用控件 第六部分 vb.net的OOP...第八部分 vb.net的多线程 第九部分 vb.net的文件和出错处理

    VB.Net_Camera.rar_VB.NET 摄像头_vb.net 拍照_vb.net 摄像头_vb.net摄像头

    在VB.NET编程环境中,开发摄像头相关的应用程序是一项常见的需求,尤其在多媒体、监控或者视频会议等领域。本项目"VB.Net_Camera.rar"提供了一个简单的实例,教你如何利用VB.NET实现摄像头拍照的功能。下面将详细...

    vb.net usb通讯程序

    vb.net2003编写的HID测试程序,根据网上的VB6修改,功能已经全部实现。包括HidD_GetHidGuid,SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,CreateFile,SetupDiGetDeviceInterfaceDetail等API函数的声明和...

Global site tag (gtag.js) - Google Analytics