日期:2023-01-24 阅读量:0次 所属栏目:计算机应用
摘 要:线程是操作系统分配时间的基本实体,可由系统调度的一个最简单的代码单元,采用多线程技术的应用程序可以较好地利用系统资源。用来创建和维护线程的基类是system.Threading.Thread类。一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。
关键词:线程;同步;数据;程序
1、线程、多线程的概念和意义:
在操作系统中,进程被定义为应用程序的运行实例,是应用程序的一次动态执行。它拥有自己的地址空间。每一个进程都拥有一个主线程,同时还可以建立其他线程。线程是操作系统分配时间的基本实体,是可以由系统调度的一个最简单的代码单元,每个线程占用的时间由系统分配,系统不停地在线程之间切换。也可以将线程理解为是进程内部程序执行的路径,是进程的一个执行单元。从根本上说,线程是负责执行包含在进程的地址空间中的程序代码。
采用多线程技术的应用程序可以较好地利用系统资源。多线程技术的主要优势在于充分利用CPU的空闲时间片,用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
2、Visual Basic.NET多线程编程的实现
用来创建和维护线程的基类是system.Threading.Thread类。一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。使用ThreadStart委托指定由线程执行的程序代码。在线程存在期间,它总是处于由Threadstate定义的一个或多个状态中。可以为线程请求由ThreadPriority定义的调度优先级。大部分的Thread成员都是虚成员,因此只可以由一个特定Thread类的实例访问。使用AddressOf语句为要运行的procedure传递委派。以下代码创建Thread1实例,将名为method1的sub过程作为单独的线程运行。
Dim Thread1 As New System.Threading.Thread(AddressOf method1)
Thread1.Start
相类似的,使用Thread类的Sleep方法可以阻滞当前线程,使用suspend方法可以挂起线程,使用Suspend可以重新启动挂起的线程,使用Abort方法可以停止一个线程,使用Join方法可以使当前线程等待其他线程运行结束。
3、线程的同步
多线程应用程序在执行时被分成多个单元执行,这些单元被抢先型的操作系统分配在不同的时间段运行,并且拥有不同的优先权。根据线程的优先权和专门的调度算法,操作系统分配给每个线程运行一段时间,称为时间片(timeslice)。当某一时间片过去时,线程就会挂起并放回到队列中,而另一个线程就会被分配另一个时间片,接着运行。当线程挂起时,它的状态就会被保存下来,以便下一次可以由停下来的地方继续工作。
如果是在独立的线程中运行各种处理,而不需要访问共享的资源,则无需担心线程的同步问题。不过,当两个线程读写同一个数据时,如果协调不好的话,线程可能读的数据是不完备的或者根本就读不出来数据;而写的数据也可能写不进去。为了防止这种情况发生而采取的处理措施称之为线程的同步。在Visual 的.NET Framework的CLR中提供了三种方法来完成线程的同步。
(1)代码域同步。用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段。不支持静态域的同步。在实例化的方法中,this 指针用于同步;而在静态的方法中,类用于同步。
(2)手工同步。使用不同的同步类(诸如WaitHandle, Mutex, ReaderWriterLock, Manual ResetEvent,AutoResetEvent和Interlocked 等)创建自己的同步机制。这种同步方式要求你自己手动的为不同的域和方法同步,这种同步方式也可以用于进程间的同步和对共享资源的等待而造成的死锁解除。
(3)上下文同步。使用 Synchronization Attribute 为 ContextBoundObject对象创建简单的自动的同步。这种同步方式仅用于实例化的方法和域的同步。所有在同一个上下文域的对象共享同一个锁。
4、结束语
本文主要对visual Basic.NET的多线程机制进行了讨论,介绍了多线程的使用方法。Visual Basic .NET支持加强的、多线程开发模型,它使开发者迅速拥有了开发多线程应用程序的能力。实现需要并发执行的应用程序,尤其对于大部分时间被阻塞的程序段多线程技术是最佳选择。总之,了解和掌握多线程技术会对我们在解决实际问题时发挥很大的作用。
参考文献:
[1] 苏葆光,王渊明. 下多线程技术的实现[J].广西大学梧州分校学报.2005.7
[2] 程伟,肖文教. Visual 的多线程机制[J].电脑开发与应用.2007.11
[3] 欧广宇,邓桂英. 多线程技术基于的实现[J].微机发展.2004.11
[4] 尹建民 张海卿. Visual 入门与进阶[ ].北京 清华大学出版社, 2002 本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/242670.html