VB.NET语言多线程同步机制的实现

来源 :教育科研 | 被引量 : 0次 | 上传用户:JK0803_liuchao
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要分析了VB.NET语言线程与进程的关系,线程的优先级,多线程需要同步的原因和使用多线程的同步机制访问共享资源的实现方法。
  关键词多线程;VB.NET;同步
  
  进程(Process)是应用程序在内存环境中基本的执行单元,进程是有不同的地址空间且处在可执行状态中的应用程序。线程(Thread)是进程中某个单一的顺序控制流程,线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,同一个进程的多个线程共享相同的内存空间,并发执行的多个线程之间存在着对临界资源的争夺问题,即互相配合的几个线程之间如何实现工作点同步的问题。
  
  一、线程的创建
  
  VB.NET中的多线程功能主要是通过Thread类来支持和实现的。Thread类属于.NET基础类库的System.Threading命名空间。线程自创建后就处于其生命周期中,程序可以对线程进行各种控制操作,包括启动、挂起、休眠、恢复和停止等。①创建线程Dim myThread = New System. Threading.Thread(AddressOf过程名),把一个过程定义成一个新线程以便和其他线程并发执行;②启动线程 myThread.Start 使线程从就绪状态变为运行状态;③挂起线程 myThread.suspend() 使该线程从运行变为停止状态,直到再次恢复它为止;④使线程休眠 myThread.sleep(整数值);⑤恢复线程 myThread.resume() 该线程再次启动,继续工作。⑥停止线程 myThread.abort() 该线程停止工作,并被释放,不能再被恢复。
  
  二、线程的优先级
  
  线程的优先级代表线程的重要程度,当有多个线程同时处于可执行状态并等待获得CPU时间,线程调度器根据各个线程的优先级来决定给谁分配CPU时间,采用“抢占式”策略来调度线程执行,优先级越高获得CPU时间的机会就越大,如果优先级相同,则遵循“先来先服务”的调度原则。VB.net使用线程的Priority属性来设置线程的优先级。常用的优级别有:AboveNormal (较高优先级)、BelowNormal(较低优先级)、Highest(最高优先级)、Lowest(最低优先级)、Normal(平均优先级)。如果要指定线程myThread的优先级为最高优先级,则用语句myThread.Priority = ThreadPriority.Highest说明。
  
  三、多线程同步
  
  (一)多线程需要同步的原因
  由于同一进程的多个线程共享同一片存储空间,在带来的方便的同时,也会带来访问冲突等问题。比如,两个线程同时存取一个数据变量,其中一个对数据进行了修改,而另一个线程仍旧是修改前的数据,这就带来了数据不一致的问题。例如在汽车售票过程中,可能会有很多人同时购票,必须开辟多个线程同时为他们服务,假设共有60张票,分别由4个线程完成。
  Class Ticket
  Dim tickets As Integer = 60 ’总票数
  Sub run()
  While True
   ’A点
  If tickets > 0 Then
  Thread.Sleep(10) ’当前执行的线程睡眠10毫秒
  Console.Write( tickets & “ ”)
  tickets -= 1
  End If
  ’B点
  End While
  End Sub
  End Class
  Private Sub Button1_Click( ~)
  Dim t1, t2, t3, t4 As Thread
  Dim Tticket As New Ticket
  t1 = New Thread(AddressOf Tticket.run):t2 = New Thread(AddressOf Tticket.run)
  t3 = New Thread(AddressOf Tticket.run):t4 = New Thread(AddressOf Tticket.run)
  t1.Start() : t2.Start() : t3.Start() : t4.Start()
  End Sub
  单击按钮运行结果如下:60,59,…,1,0,-1,-2, 从执行结果就可以看出为什么系统中票已卖完还可以继续卖几张的原因,就是因为当系统中只有一张票的时候,第一个线程都进入了if代码段里面,买了最后一张票, tickets为0,这时时间片到了;第二个线程开始运行,买了第0张票, tickets为-1,时间片到期了。以此类推,第三、第四个线程if代码段里面,从而导致了系统继续把0,-1,-2的票打印出来,这当然不是我们想要的结果,这种结果是不正确的,这个问题的根源在于多个线程同时访问了tickets变量,单独的并发的线程访问代码段中的同一对象(tickets),则这个代码段叫做临界区,我们需要用同步的机制对代码段进行保护,避免程序出现不确定的因素。
  (二)多线程同步的实现方法
   同步处理关系涉及到线程之间的通信与协作。Vb.NET中同步类提供信号处理机制,允许开发具有线程安全的代码,并实现一定程度的确定性。同步类有以下几种:①AutoResetEvent:等待句柄,用于通知一个或多个等待线程发生了一个事件。AutoResetEvent 在等待线程被释放后自动将状态更改为已发出信号;②Interlocked:为多个线程共享的变量提供原子操作;③ManualResetEvent等待句柄,用于通知一个或多个等待线程发生了一个事件;④Monitor: 提供同步访问对象的机制,调用 SyncLock 以使用监视器对象。⑤Mutex: 等待句柄,可用于进程间同步;⑥ReaderWriterLock: 定义用于实现单个写入者和多个读取者的锁定。⑦WaitHandle: 封装操作系统特有的、等待对共享资源进行独占访问的对象。
  汽车售票系统案例中的遇到的问题,可用以下三种同步方法解决。
  1.用Monitor类实现同步
   Monitor类通过为单个线程锁定对象的方式来控制对代码块的访问,防止了其他线程访问同一代码块(临界区),当涉及到同一对象的访问时,Monitor类会阻止其它线程同时进入临界区 (代码块)。Monitor.Enter 方法指定对象上获取排他锁;Monitor.Exit 方法释放指定对象上的排他锁。Monitor类的语法规则如下:
  Dim obj = New Object
  Monitor.Enter(obj)
  ‘临界区
  Monitor.Exit(obj)
  在Ticket类中新增定义一个Dim obj = New Object 锁对象变量,在A点插入语句 Monitor.Enter(obj),在B点插入语句Monitor.Enter(obj)就能完成多线程的同步。
  2.用SyncLock语句块实现同步
  SyncLock 语句确保不会同时有多个线程执行该语句块。SyncLock 防止各个线程进入该语句块,直到没有其他线程执行它为止。它的语法规则如下:
  SyncLock expression
   ‘'临界区
  End SyncLock
  其中,expression是一个表达式,它的类型必须是引用类型,如类、模块、接口、数组或委托。当线程到达SyncLock语句块时,将在指定的表达式上调用共享方法Monitor.Enter进行独占锁,这就防止了表达式在多个线程运行期间更改值,从而避免代码产生意外的结果。在Ticket类中新增一个Dim obj = New Object 锁对象变量,在A点插入语句SyncLock obj,在B点插入语句End SyncLock就能完成多线程的同步。
  3.用Mutex类实现同步
  Mutex是一个从WaitHandle派生的类,用于对多个复杂的线程同步的问题,它也允许单线程的访问。用来协调对要求独占访问的资源的访问,可让单个线程独占访问一项资源或者一组资源。Mutex类的WaitOne方法接受一个等待句柄作为参数,并使调用线程处于等待状态,直至另一个进程调用 Set 将当前的等待句柄设置为已发出信号。如果不使用WaitOne…ReleaseMutex语法,互斥体就不能强制访问一个对象。其语法结构如下:
  Dim m_Mutex As New Mutex
  m_Mutex.WaitOne()
  ‘临界区
  m_Mutex. ReleaseMutex
  在Ticket类中新增定义一个Dim m_Mutex As New Mutex互斥体变量,在A点插入语句m_Mutex.WaitOne(),
  在B点插入语句m_Mutex.ReleaseMutex()就能完成多线程的同步。
  
  三、结束语
  
   本文就什么是线程、线程与进关系、线程的优先级、VB.NET多线程同步机制的实现方法进行了讨论。VB.NET语言的多线程还有许多问题可以研究和探讨,多线程的应用也有待于我们的进一步的挖掘。
  
  参考文献
  [1] Robertlan Oliver . Designing Enterprise Applications with Microsoft Visual Basic .net [M].Microsoft Press,2007.
  [2] 岂兴明等.Visual Basic.Net 项目开发宝典[M]. 电子工业出版社,2007.
  [3] 陈健.VB.NET多线程技术及其应用[J].吉林师范大学学报 2008.1.
  
  作者简介:
  包宋德男(1982-),籍贯:湖南衡阳,湖南娄底职业技术学院系统分析师,湖南大学在读软件硕士,研究方向:软件设计技术。
其他文献
摘 要大学精神作用于校园文化建设研究,是大学精神在校园文化建设中发挥作用的价值所在。文章通过对大学精神与校园文化建设的研究,分析大学精神是挖掘校园文化深层结构的基本要素,用大学精神引领校园文化建设发展,营造积极向上、健康高雅的精神文化,使校园处处闪现出和谐之美。  关键词大学精神;校园文化建设     一、大学精神和校园文化核心概念与界定    (一)大学精神  概念的界定及理解:大学精神是大学文
期刊
摘 要本文通过对信息素质教育概念的介绍,提出军队院校图书馆在信息素质教育中的地位和作用,并探讨了军队图书馆在提高军校信息素质教育中的途径。  关键词军校图书馆;信息素质教育;地位;作用    AbstractBased on introduction of concept about information quality education , this article advanced pos
期刊
摘 要我国拥有丰富多样的精神文化遗产,民间美术就是华夏文化的代表之一,近年来有多项民间艺术已经申报了非物质文化遗产。校园美术教育教授濒临失传的民间传统艺术,不仅能提高学生艺术素养,与其他学科融会贯通,更能够增进学生民族自豪感;同时也是对非物质文化遗产传承和延续。在弘扬国学国艺的当下,在校园美育中开展学习民间美术的课程显得尤为重要。  关键词民间美术;民俗;校园美育    一、民间美术的内涵    
期刊
摘 要家庭是人生中第一所学校,心理学的许多研究表明,儿童心理是否健康,与家庭心理环境关系密切,健康的家庭心理环境是指一个家庭中拥有和谐的亲子关系、良好的情绪氛围、科学的教养方式以及有效地沟通渠道等。儿童只有在这样的家庭心理环境中成长,才能成为一个心智健全的人。  关键词家庭;心理环境;儿童心理健康    一、和谐的亲子关系是儿童心理健康成长的关键    亲子关系是指父母与子女之间的相互关系。亲子关
期刊
摘 要我国的跳高发展呈现了三次发展高潮,但每次发展都是训练内容和方法是不同的,本文运用基于四环共振原理对我国跳高运动进行分析。  关键词基于四环共振原理;跳高运动;技术分析    一、新中国成立后我国跳高发展史上三次高潮    (一)郑凤荣时期(以大运动量为主)  上世纪五十年代,我国跳高训练主要采用苏联的训练模式,但黄健教练则不同,他对郑凤荣进行了全面的身体素质训练,短跑、障碍跑、铅球、跳远、体
期刊
摘要 结合“质量工程”本科特色专业建设,提出了新形势下农业机械化及其自动化特色专业改革方案和人才培养模式,探索创新,适应现代化大农业对人才的需求。  关键词 农业机械化及自动化;特色专业;建设    为了促进高等学校人才培养与经济社会发展的紧密结合,根据《教育部财政部关于实施高等学校本科教学质量与教学改革工程的意见》(教高[2007]1号),“十一五”期间,将遴选3000个左右本科专业点进行重点建
期刊
摘要 本文首先论述化学课程体系在科学素养诸要素中的地位与作用,然后论述大学基础教育阶段学生应该学习的化学核心知识与形成的化学学科意识。  关键词 化学课程;知识体系;核心知识单元;化学学科意识    中国传统的科学教育以掌握知识与技能为目标。理解原理、记住结论、熟练解题和掌握技能成了学生学习的全部内容。学生虽然学了不少科学知识,但是不能全面地理解科学的本质,有效地学习科学思想与方法,形成正确的价值
期刊
摘 要培养适应经济、社会、科技发展对合格人才培养的要求需要更新教育观念:加强德才的培养;注重“通”与“专”的结合;重视发展个性;树立终身学习观。  关键词教育;培养目标;德才兼备;通识教育;终身教育    2006年1月9日胡锦涛在全国科学技术会上讲“目前,我国科技和教育的总体水平同世界先进水平相比仍有较大差距。我们要努力培养一批德才兼备、国际一流的科技尖子人才,同时要加大引进力度,吸引广大出国留
期刊
摘要 进入21世纪服装表演在原先风貌下融入了新的艺术形态,多元化的视觉观念通过新的传达方式打破传统界限,赋予舞台视觉语言新的应用价值与审美观念。舞美设计已成为服装表演中重要的表现因素,本文主要从晚会类的“时装秀”都应该进行怎样的舞美设计来论述的。  关键词 舞美设计;时装表演;舞台;背景;灯光    如今大大小小的“时装秀”充斥着时尚的舞台,服装表演已经从最初的单一展示服装发展成为有良好的舞台美术
期刊
摘 要商务英语谈判在现代商务活动的地位日益重要。本文主要介绍了在商务英语谈判过程中的“倾听”技巧以及“倾听”的注意事项。  关键词商务英语谈判;倾听;外商    Abstract Business negotiation is playing more and more important roles in business communications. This paper mainly in
期刊