vb.net的并发性问题

当用户在写出多线程程序的时候,可能最具有挑战性的就是独立的线程和程序的其他的部分有并发性。例如,程序中的一个独立的线程正在处理一系列的名称,而程序的另一个部分必须等待这个线程完成以后才能进行,通常处理并发性的线程的办法就是判断线程的状态或者通过一个事件去标志和得到一个特征值。
最简单的,也是效率最低的方法就是判断一个线程的IsAlive属性的值,当一个线程在开始(Start)以前它的属性IsAlive的值是"False",而在它运行的过程中,它的属性IsAlive的值是"True"。这种方法并没有通过一个事件去标志和得到一个特征值可靠,而且如果这样做的庆,也失去了自由线程的很多优点和便利之处。例如:
while anotherthread.IsAlive=False
'一直等待到该线程开始
End While
'线程已经开始,现在等待它结束
'While anotherthread.IsAlive=True
'等待一直等待到线程结束
End While
'作一些线程结束以后的事情
一个更好的处理线程并发性的办法就是使用事件,每一个线程都能够运行一个事件把它自己的状态以一个标志的形式给主程序一个值,或者是给其他一个线程一个具有标志自身状态后个值,这样当多个线程在运行一个过程的多个拷贝的时候,这些线程都具有自己特有的事件来标志各自的状态,则在线程之处的程序的其他的部分,就可以通过运行这些事件,得到线程的信息,并且进行下一步的信息的处理。例如:
Public Event Status(Byval ThreaStatus As Integer,Byval ThreadID As Integer)
vb.net 提供了SyncLock表述来使得在一个expression中一些statements可以具有并发性,这保证了多个线程在运行时不在同一时间里,运行相同的statements,当进入了SyncLock模块,共享的方法System.Monitor.Enter将在特定的expression下运行,一直到这个特定的线程对expression返回的对象有exclusive Lock以后,模块中的代码才会停止运行。
注意:expression的类型必须是可引用的那种类型
补充:SyncLock表述

语法:
SyncLock expression
...[Block]
End SyncLock
参数:
expression
必需的参数,一个单独的操作和值的集合,并能得到惟一的值。
功能:
SyncLock表述,能够确保多线程不在同一个时间内,运行相同的statements,当一个线程运行到一个SyncLock模块,并不是马上就执行模块里的代码,而是等到对expression返回的对象有锁定(lock)的权力。这使得expression在几个线程运行的时候改变了值,以至产生一些不可预料的错误。
注意:expression的类型必须是引用类型的,如一个类,一个模块,一个接口等等。

时间: 2024-10-25 20:37:32

vb.net的并发性问题的相关文章

DB2通用数据库的并发性

在数据库管理系统(DBMS)的领域中,术语"并发性"用于表示不止一个应用程序基本上(从用户的角度来看)同时访问同一数据的能力.因为 DBMS 的主要优点之一就是可以在多个用户和多个应用程序中共享数据,所以数据库系统应该提供一种管理并发访问数据的方法.DBMS 必须确保维护数据的一致状态和数据的完整性. 取得该效果的一种方法就是实施只串行(serial-only)模式来处理数据库请求.即每个事务都要等待另一事务(具有更高的优先权或者比它早启动)完成其工作.然而,对于现在的在线系统和客户异

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略

简介:事务策略 系列文章的作者 Mark Richards 将讨论如何在 Java 平台中为具有高吞吐 量和高用户并发性需求的应用程序实现事务策略.理解如何进行折衷将帮助您确保高水平的数据完整性和 一致性,并减少随后开发流程中的重构工作. 我在本 系列 的前几篇文章中所介绍的 API 层 和 客户端编排策略 事务策略是应用于大多数标准业 务应用程序的核心策略.它们简单.可靠.相对易于实现,并且提供了最高水平的数据完整性和一致性. 但有时,您可能需要减小事务的作用域以获取吞吐量.改善性能并提高数据

Oracle的闩锁、锁定及并发性

数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据 库.这里就涉及两个很重要的问题. 这些用户之间的操作不会互相破坏.比如两个用户同时在相同的物理位置上写数据时,不能发生互 相覆盖的情况.这叫串行化,也就是说,即便两个用户同时写,也必须有先后,一个用户写完,另一个 用户继续写.串行化会降低系统的并发性,但这对于保护数据结构不被破坏来说则是必需的. 在满足串行化的前提下,如何将并发性提升到最大. 在Oracle数据库中,通过闩锁(latch)和锁定(lock)来

推荐阅读Java并发性领域编程最值得一读的力作《JAVA并发编程实践》

我的第一次之给<JAVA并发编程实践>写推荐序英文书名:Java Concurrency in Practice 中文书名:JAVA并发编程实践 这是一本入围17届Jolt大奖的书,虽然最终他没有获奖,但是这只是与政治有关的.:) 推荐序原文如下: http://book.csdn.net/bookfiles/398/10039814644.shtml 在汗牛充栋的 Java 图书堆中,关于并发性的书籍却相当稀少,然而这本书的出现,将极大地弥补了这一方面的空缺.即使并发性编程还没进入到您的 J

《Java安全编码标准》一1.7 并发性、可见性和内存

1.7 并发性.可见性和内存 可以在不同线程之间共享的内存称为共享内存(shared memory)或内存堆(heap memory).本节使用变量(variable)这个名词来代表字段和数组元素[JLS2005].在不同的线程中共享的变量称为共享变量.所有的实例字段.静态字段以及数组元素作为共享变量存储在共享内存中.局部变量.形式方法参数以及异常例程参数是从来不能在线程之间共享的,不会受到内存模型的 影响. 在现代多处理器共享内存的架构下,每个处理器有一个或多个层次的缓存,会定期地与主存储器进

JVM 并发性: Java 和 Scala 并发性基础

Java 并发性支持 在 Java 平台诞生之初,并发性支持就是它的一个特性,线程和同步的实现为它提供了超越其他竞争语言的优势.Scala 基于 Java 并在 JVM 上运行,能够直接访问所有 Java 运行时(包括所有并发性支持).所以在分析 Scala 特性之前,我首先会快速回顾一下 Java 语言已经提供的功能. Java 线程基础 在 Java 编程过程中创建和使用线程非常容易.它们由 java.lang.Thread 类表示,线程要执行的代码为 java.lang.Runnable 

并行计算——寻找并发性 (功能分解)

我们使用下面的框图来说明怎样寻找我们希望的并发性: 我们使用模式进行分解: 1.分解模式:存在两种分解模式,任务分解和数据分解.使用分解模式将问题分解为多个能够并行的小片段. 2.相关性分析模式:这一组包括3种模式,用于分组任务和分析任务间的相关性:分组任务.排序任务和数据共享.通常,模式是以这种顺序被应用.但是,实际上常常需要重新应用某一个模式,或者甚至可能需要重新使用分解模式. 3.设计评估模式:这个设计中的最后一个模式用于指导算法设计者分析已经完成的工作,然后再转向"算法结构"空

WCF的并发性问题

问题描述 使用控制台程序承载WCF,会影响WCF的并发性吗? 解决方案 解决方案二:并发一般是指服务器,你做个客户端有啥影响.WCF效率很差.并发更差.IIS本身就是为了简单易用而牺牲了相当大的效率.解决方案三:和控制台没有关系,都需要考虑并发.解决方案四:WCF出性能问题最常见的情况下,你在客户端看到的异常信息是"超时"异常.当然可能有的人说"遇到超时,那么就增加超时等待时间啊!",这显然是错误的.因为不合理的超时本身就是不可容忍的错误,怎么能用设置更长的超时时间

Java并发性和多线程介绍目录

Java并发性和多线程介绍 多线程的优点 多线程的代价 并发编程模型 如何创建并运行java线程 竞态条件与临界区 线程安全与共享资源 线程安全及不可变性 Java内存模型 JAVA同步块 线程通信 Java ThreadLocal Thread Signaling (未翻译) 死锁 避免死锁 饥饿和公平 嵌套管程锁死 Slipped Conditions Java中的锁 Java中的读/写锁 重入锁死 信号量 阻塞队列 线程池 CAS 剖析同步器 无阻塞算法 阿姆达尔定律 文章转自 并发编程网