-
vb.net教程之vb.net的并发性问题
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的类型必须是引用类型的,如一个类,一个模块,一个接口等等。
当用户在写出多线程程序的时候,可能最具有挑战性的就是独立的线程和程序的其他的部分有并发性。例如,程序中的一个独立的线程正在处理一系列的名称,而程序的另一个部分必须等待这个线程完成以后才能进行,通常处理并发性的线程的办法就是判断线程的状态或者通过一个事件去标志和得到一个特征值。
最简单的,也是效率最低的方法就是判断一个线程的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的类型必须是引用类型的,如一个类,一个模块,一个接口等等。
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比