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

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

 
阅读更多

 

一、 WaitHandle 类封装等待对共享资源的独占访问的操作系统特定的对象

1)WaitHandle 类型公开以下成员。

构造函数
--------------------------------------------------------------------------------

   名称 说明
    WaitHandle  初始化 WaitHandle 类的新实例。 
页首
属性
--------------------------------------------------------------------------------

   名称 说明
   Handle  已过时。获取或设置本机操作系统句柄。
  SafeWaitHandle  获取或设置本机操作系统句柄。 
页首
方法
--------------------------------------------------------------------------------

   名称 说明
   Close  在派生类中被重写时,释放由当前 WaitHandle 持有的所有资源。 
  CreateObjRef  创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
   Dispose()  释放由 WaitHandle 类的当前实例使用的所有资源。 
    Dispose(Boolean)  在派生类中被重写时,释放由 WaitHandle 使用的非托管资源,也可以根据需要释放托管资源。 
    Equals(Object)  确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
    Finalize  允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
    GetHashCode  用作特定类型的哈希函数。 (继承自 Object。)
  GetLifetimeService  检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
    GetType  获取当前实例的 Type。 (继承自 Object。)
  InitializeLifetimeService  获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
    MemberwiseClone()  创建当前 Object 的浅表副本。 (继承自 Object。)
  MemberwiseClone(Boolean)  创建当前 MarshalByRefObject 对象的浅表副本。 (继承自 MarshalByRefObject。)
   SignalAndWait(WaitHandle, WaitHandle)  向一个 WaitHandle 发出信号并等待另一个。 
   SignalAndWait(WaitHandle, WaitHandle, Int32, Boolean)  向一个 WaitHandle 发出信号并等待另一个,指定超时间隔为 32 位有符号整数,并指定在进入等待前是否退出上下文的同步域。 
   SignalAndWait(WaitHandle, WaitHandle, TimeSpan, Boolean)  向一个 WaitHandle 发出信号并等待另一个,指定超时间隔为 TimeSpan,并指定在进入等待前是否退出上下文的同步域。 
    ToString  返回表示当前对象的字符串。 (继承自 Object。)
   WaitAll(WaitHandle[])  等待指定数组中的所有元素都收到信号。 
   WaitAll(WaitHandle[], Int32)  等待指定数组中的所有元素接收信号,同时使用 Int32 值指定时间间隔。 
   WaitAll(WaitHandle[], TimeSpan)  等待指定数组中的所有元素接收信号,同时使用 TimeSpan 值指定时间间隔。 
   WaitAll(WaitHandle[], Int32, Boolean)  等待指定数组中的所有元素收到信号,使用 Int32 值指定时间间隔,并指定是否在等待之前退出同步域。 
   WaitAll(WaitHandle[], TimeSpan, Boolean)  等待指定数组中的所有元素收到信号,使用 TimeSpan 值指定时间间隔,并指定是否在等待之前退出同步域。 
   WaitAny(WaitHandle[])  等待指定数组中的任一元素收到信号。 
   WaitAny(WaitHandle[], Int32)  等待指定数组中的任意元素接收信号,同时使用 32 位带符号整数指定时间间隔。 
   WaitAny(WaitHandle[], TimeSpan)  等待指定数组中的任意元素接收信号,同时使用 TimeSpan 指定时间间隔。 
   WaitAny(WaitHandle[], Int32, Boolean)  等待指定数组中的任一元素收到信号,使用 32 位带符号整数指定时间间隔并指定是否在等待之前退出同步域。 
   WaitAny(WaitHandle[], TimeSpan, Boolean)  等待指定数组中的任一元素收到信号,使用 TimeSpan 指定时间间隔并指定是否在等待之前退出同步域。 
    WaitOne()  阻止当前线程,直到当前 WaitHandle 收到信号为止。 
  WaitOne(Int32)  阻止当前线程,直到当前 WaitHandle 收到信号,同时使用 32 位带符号整数指定时间间隔。 
  WaitOne(TimeSpan)  阻止当前线程,直到当前实例收到信号,同时使用 TimeSpan 指定时间间隔。 
   WaitOne(Int32, Boolean)  阻止当前线程,直到当前的 WaitHandle 收到信号为止,同时使用 32 位带符号整数指定时间间隔,并指定是否在等待之前退出同步域。 
  WaitOne(TimeSpan, Boolean)  使用 TimeSpan 指定时间间隔并指定是否在等待之前退出同步域,以此阻止当前线程,直到当前的实例收到信号。  
 二、AutoResetEvent 类

 

AutoResetEvent 允许线程通过发信号互相通信。 通常,当线程需要独占访问资源时使用该类。

线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。 如果 AutoResetEvent 为非终止状态,则线程会被阻止,并等待当前控制资源的线程通过调用 Set 来通知资源可用。

调用 Set 向 AutoResetEvent 发信号以释放等待线程。 AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。 如果没有任何线程在等待,则状态将无限期地保持为终止状态。

如果当 AutoResetEvent 为终止状态时线程调用 WaitOne,则线程不会被阻止。 AutoResetEvent 将立即释放线程并返回到非终止状态。

 重要事项 
不能保证对 Set 方法的每次调用都释放线程。 如果两次调用十分接近,以致在线程释放之前便已发生第二次调用,则只释放一个线程。 就像第二次调用并未发生一样。 另外,如果在调用 Set 时不存在等待的线程且 AutoResetEvent 已终止,则该调用无效。
 

可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 的初始状态:如果初始状态为终止状态,则为 true;否则为 false。

AutoResetEvent 也可以同 staticWaitAll 和 WaitAny 方法一起使用。

有关线程同步机制的更多信息,请参见概念文档中的 AutoResetEvent。

从 .NET Framework 2.0 版开始,AutoResetEvent 从新的 EventWaitHandle 类派生。 AutoResetEvent 在功能上等效于用 EventResetMode.AutoReset 创建的 EventWaitHandle。

 注意 
与 AutoResetEvent 类不同的是,EventWaitHandle 类提供对已命名的系统同步事件的访问。
 

 

三、AutoResetEvent的几个重要知识点

1)构造函数

 

AutoResetEvent 构造函数的参数initialState为System.Boolean类型
若要将初始状态设置为终止,则为 true;若要将初始状态设置为非终止,则为 false。

2)方法

Reset将事件状态设置为非终止状态,导致线程阻止。(继承自EventWaitHandle。)

Set将事件状态设置为终止状态,允许一个或多个等待线程继续。(继承自EventWaitHandle。)

SetAccessControl设置已命名的系统事件的访问控制安全性。(继承自EventWaitHandle。)

WaitOne阻止当前线程,直到当前WaitHandle收到信号为止。(继承自WaitHandle。)

 

 

 


 

 

分享到:
评论

相关推荐

    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判断网络连接状态--.txt

    VB.NET判断网络连接状态

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

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

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

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

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

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

    vb.net华视身份证读卡器程序CVR-100U源代码

    本文将详细探讨如何使用VB.NET编程语言,针对华视CVR-100U身份证读卡器进行程序开发,以实现对身份证信息的有效读取和处理。 华视CVR-100U是一款专业的身份证读卡器,其具备USB接口,能够快速、准确地读取第二代...

    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.Net2010VB6转VB.Net(高清视频+源码).zip

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

    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.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是一款代码转换软件,将用户...

    vb.net.zip_VB.NET 控件_vb.net_vb.net excel_vb.net 控件_vb.net控件

    VB.NET 是一种基于.NET Framework的编程语言,由微软公司开发,用于构建Windows桌面应用程序、Web应用...通过学习和实践这些示例,开发者可以提升其在VB.NET控件使用、Excel操作、网络通信和多线程编程等方面的能力。

    VB.NET.rar_.net 教程_VB.net教程_Visual Basic.Net_vb.net_vb.net 实例

    1. 变量与数据类型:VB.NET支持多种内置数据类型,如Integer、Double、String等,理解变量的声明、赋值和类型转换是编程的基础。 2. 控制结构:包括条件语句(If...Then...Else)、循环语句(For...Next、While......

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

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

Global site tag (gtag.js) - Google Analytics