多线程技术的实现与研究

2011年第1 1期 福建 电脑 109 多线程技术的实现与研究 林恒建 (福建船政交通职业学院信息工程系福建福州350007) 【摘 要】:Java语言对应用程序多线程的支持,增强了Java作为网络程序设计语言的优势,提供了方 便用户使用的多任务并发执行的方法。 【关键词】:Java语言、多线程、同步、状态控制。 1.引言 Java程序设计语言将线程支持与语言运行环境结 合在一起。提供了方便用户使用的多任务并发执行的 能力。处在可执行状态中的应用程序称为进程。从用户 角度.进程是应用程序的一个动态执行过程。从操作系 统角度,进程代表的是操作系统分配的内存、CPU时间 片等资源的基本单位,为正在运行的程序提供的运行 环境。进程与应用程序的区别在于应用程序是一段静 态代码存储在硬盘等存储空间中。而进程则是处于动 态条件下由操作系统维护的系统资源管理实体。线程 是比进程更小的执行单元,一个进程可以分为多个线 程,形成多条执行路线,完成多项操作。 2.线程的状态控制 在线程的生命周期中。可以将线程分为创建、就 绪、运行、睡眠、挂起和死亡六种状态。这些线程状态表 明线程处于生命周期的那个阶段。 创建状态:当创建线程对象实例后,系统没有为其 分配CPU时间片等线程运行资源。就绪状态:在处于 创建状态的线程中调用start0方法,线程的状态转换为 就绪状态。此时线程已经获得除CPU时间之外的其它 系统资源,只等JVM的线程调度器按照线程的优先级 对该线程进行调度,从而使该线程拥有能够获得CPU 时间片的机会。睡眠状态:在线程运行过程中调用 sleep0方法并在方法参数中指定线程的睡眠时间,将线 程状态转换为睡眠状态。此时线程停止运行指定的睡 眠时间,但在不释放占用资源。睡眠时间到达后,线程 重新由JVM线程调度器进行调度和管理。挂起状态: 通过调用suspend 0方法将线程的状态转换为挂起状 态。此时线程释放占用的所有资源,由JVM调度转入 临时存储空间,当应用程序调用resume0方法是,恢复 线程运行。死亡状态:线程正常运行结束,调stopO或 destroy0方法后线程进入死亡状态。 3.线程的创建和启动 JAVA多线程实现方式主要有三种:继承Thread 类、实现Runnable接口,这两种方式线程执行完后都没 有返回值;还有一种锁使用ExecutorService、Callable、 Future实现有返回结果的多线程。 继承Thread类的多线程程序设计方法:Thread类 是JDK中定义的用于控制线程对象的类,在该类中封 装了用于进行线程控制的方法。继承Thread类的多线 程程序设计方法是让应用程序类继承Thread类,并重 写131n方法实现并发性处理过程。启动线程的唯一方 法就是通过Thread类的start0实例方法。start0方法是 一个native方法,它将启动一个新线程,并执行run0方 法。例如: public class ThreadDemo extends Thread{ public void mnO f System.out.println(”ThreadDemo.mnO线程运行中”); l } 启动线程: ThreadDemo myThread=new ThreadDemo0; myThread.staaO; 实现Runnable接口方式实现多线程: 如果自己的类已经继承了另一个类,由于Java的 单继承机制,无法再继承Thread了,此时可通过实现 Runnable接口方式实现多线程,例如: public class ThreadDemo extends OtherClass implements Runnable f public void run0{ S ̄tem.out.p6ndn(”ThreadDemo. nO线程运行中”); l l 启动ThreadDemo,需要首先实例化一个Thread,并传人ThreadDe— mo实例: ThreadDemo threadDemo=new ThreadDemo0; Thread myThread=new Thread(threadDemo); myThread.sty0; 特别地.可以通过以下两段简洁代码开始一个新线程: new Thread(new Runnable0( public void runO f //这里写代码,开始~个新线程 】 1 ). ̄taa0; 和 new Thread0{ public void mn()f

 110 福 建 电脑 201 1年第1 1期 //这里写代码。开始一个新线程 J J.startO; 第一段代码本质上是通过实现Runnable接口方式 实现多线程;第二段代码本质上是通过继承Thread类 实现多线程。可见Java程序设计语言对线程的支持. 提供了方便用户使用的多任务并发执行的方法。 4.线程的同步 Java应用程序的多个线程共享同一进程的数据资 源,多个线程在并发运行过程中可能同时访问敏感性 的内容或访问数量有限资源。在Java中定义了线程同 步的概念,实现对共享资源的一致性维护。那么应该如 何控制呢?一个比简单有效的办法就是采用信号量机 制。信号量机制是定义一个信号量,表示系统能够提供 的资源数量;当一个线程占用了一个资源时,信号量减 一;当一个线程释放资源时,信号量加一,采用这种方 法控制线程访问数量有限资源的同步问题,代码如下: class Semaphore{ private int count; public Semaphore(int count)【 ,/设置资源数量 this.count=count; } //)H 键字synchronized修饰.该方法同一时刻只能由一个线程访 问 public synchronized void acquire()( while(count==O)f try{ I/等侍资源.由锁申请队列进入锁等待队列。 this.waitO; 】catch(InterruptedException e)( } J ,,获得资源 (上接第90页) Push to the correspond queue Pop the data to the initialization queue 以学生信息为例,每个学生有对应的信息(专业、 班级、姓名、性别、民族、政治面貌、省份)。在乱序的数 据中,设置排序的优先级为学生省份、学生班级、学生 性别。则该算法处理后的程序会按照设置的优先级分 好类。分析本算法的复杂度,只需要O(kn),k为需要设 置优先级的数据类型,U为需要分类的数据项。而普通 的朴素的算法需要的复杂度为O(nlogn)。使用类似于 基数排序的算法在数据分类上,能比较有效的提高数 据分类的效率。 5、结论 count--; J public synchronized void releaseO{ count++; //释放资源 /l通知锁等待队列中第一个线程进入锁等待队列。 this.uotifyO; } J 在Semaphore类方法定义中加上用于标识同步方 法的关键字synchronized。在同步方法执行过程中该方 法涉及的共享资源如:上述代码中count成员变量将 被加上共享锁,确保在方法运行期间只有该方法才能 访问共享资源,直到执行该方法的线程运行结束打开 共享锁,其它线程才能够访问这些共享资源。 5.总结 如果应用程序必须等待用户输入、等待网络连接、 数据库连接、网上数据的传输等数据传输速度较慢的 资源和执行时间较长的任务时,多线程应用程序是非 常有用的。基于Internet的应用程序一般是多线程的, 通常的服务器端应用程序必需支持大量客户访问,将 服务器端应用程序创建成多线程程序,每个连接用户 独占一个线程.缩短服务器响应时间。对执行时间较长 的任务也应该放入单独的线程中执行避免用户长时问 等待 参考文献: [1】埃史尔、陈昊鹏.《Java编程思想》(第4版)北京:机械工业出版 社2007.6 [2】霍斯特曼(Cay s.Horstmann)、Gary Comell、陈昊鹏、王浩. ((JAVA核,心技术卷2:高级特征》机械工业出版社2008.12 完成了一套排序算法的演示程序,可以实际的运 用到课堂教学中提高教学效率。同时完成了一个使用 基数排序类似算法进行数据分类的程序。 参考文献: 【1]刘红岩,陈剑,陈国青.数据挖掘中的数据分类算法综述U].清 华大学学报(自然科学版),2002,42(6):727-730. 【21严蔚敏,昊伟民.数据结构【M】.北京:清华大学出版社.1997.4 【3】徐章艳,刘作鹏等.一个复杂度为max(0(IcIIuI,o(1cI2l U/Cf)的快速属性约简算法U].计算机学报,2006,29(3):391— 399. [4】(美)科曼(Cormen,T.H.)等著,潘金贵等译.算法导论.机械 工业出版社.2006.

合集下载

摩尔线程功耗-概述说明以及解释

摩尔线程功耗-概述说明以及解释

摩尔线程功耗-概述说明以及解释

1.引言

1.1 概述

摩尔线程 (Moore's Law) 是由英特尔创始人戈登·摩尔提出的一个著名的观察和预测,指出集成电路上可容纳的晶体管数量每隔18至24个月便会翻倍,而且与时间呈指数增长的趋势。摩尔线程力量是计算机行业长期以来技术发展和创新的重要动力之一。

随着摩尔线程的进一步发展,现代计算机系统中的处理器核心数量不断增加,意味着越来越多的任务可以并行执行,从而提高了计算机的整体性能。

然而,随着摩尔线程的延续,一个重要的问题逐渐浮现,那就是功耗的增长。随着晶体管数量的增加和集成度的提高,芯片的功耗也在快速增加,这对电池供电设备和散热系统带来了极大的挑战。

因此,了解和研究摩尔线程对功耗的影响并寻找功耗优化的方法成为了当下亟需解决的问题。通过优化芯片的设计和制造工艺,降低摩尔线程的功耗,可以延长电池寿命,降低电脑系统的散热需求,提高整体能效。

本文将深入探讨摩尔线程的定义和原理,分析摩尔线程对功耗的影响,并提出一些优化方法来减少功耗。通过对摩尔线程功耗的重要性进行总结,展望未来摩尔线程的发展,并得出本文的结论。

1.2文章结构

文章结构部分内容:

本文主要通过对摩尔线程功耗的探讨,旨在分析摩尔线程在计算机系统中对功耗的影响,并提出相应的优化方法。文章主要分为三个部分,分别是引言、正文和结论。

在引言部分,将首先对摩尔线程进行概述,介绍其定义和原理,为读者提供对摩尔线程的基本了解。接着,会总结文章的结构,明确阐述各个部分的内容安排。最后,明确本文的目的,即通过对摩尔线程功耗的研究,探讨其重要性和未来发展前景。

正文部分将分为三个小节。首先,会详细介绍摩尔线程的定义和原理,解释其在计算机系统中的具体作用和工作原理。其次,将讨论摩尔线程对功耗的影响,分析其可能导致的功耗增加的原因和影响范围。最后,将提出一些摩尔线程功耗的优化方法,通过降低功耗来提高系统的能效和性能。

云计算环境下异构数据库整合技术的研究与实现

云计算环境下异构数据库整合技术的研究与实现

云计算环境下异构数据库整合技术的研究与实现

摘要:该文提出一种通过利用云资源、分布式部署实体数据库代理服务端agent、异构数据库服务端server和服务网站等模块,构建一个异构数据库整合的多线程原型系统的方法。系统中agent实现对实体数据库进行第一层虚拟和执行sql请求;server解析自定义查询语言和整合agent返回结果;服务网站则提供基本的注册、申请和下载服务;原型系统各模块间通过套接字进行网络通信,通信内容为xml格式,外部可以通过自定义的查询语言访问原型系统。通过实现这套分布式的原型系统,达到高效整合异构数据库的目的。

关键词:异构数据库;数据整合;云计算

中图分类号:tp391 文献标识码:a 文章编号:1009-3044(2013)14-3232-04

云计算[1]是近些年新兴的一种重要的信息技术。它是构建在互联网上的一组新兴技术,可以将高速互联网、高性能计算机、大型数据库、传感器、远程设备等融为一体,实现计算资源、信息资源、知识资源等的全面共享。云计算的这些诸多特性为异构数据库的访问和整合等提供了一种新的平台访问方式。通过对云计算的应用对异构数据库进行整合,可以很好的利用分布在不同数据库中的相关数据。

随着计算机应用的发展和普及,存储器容量的扩大,数据需求的明细化,地域分布的不平衡化等,在这样的背景下,数据量也呈现出了高增长性。现而今怎样高效利用这些分布在异构数据库中的数据或者方便的对分布在不同地域、不同数据库管理软件中的数据进行统一访问并对数据进行整合成为了一个具有意义的挑战[2-4]。

本文针对在云计算环境下如何设计与实现异构数据库整合这个问题展开讨论,提出一套可行的方案及其实现方法。

1 不同数据库的差异性

数据库系统发展至今,出现过层次模型、网状模型、关系模型等数据库模型[5]。当前使用最广泛的数据库大多都是关系型数据库,其中oracle、sqlserver和mysql占有了很大的比例[6]。这三种数据库各有各的特性和用户群体,以及许多各自的细节问题。

山山客多开原理

山山客多开原理

第 1 页 共 2 页 山山客多开原理

【原创实用版】

目录

1.山山客多开的背景与意义

2.山山客多开的原理与技术细节

3.山山客多开的应用场景与实践案例

4.山山客多开的发展前景与挑战

正文

【1.山山客多开的背景与意义】

山山客多开是一款基于互联网的多功能客户端软件,为广大用户提供了丰富的网络资源和服务。在当前互联网高速发展的背景下,山山客多开的出现,为提高用户的上网体验和满足多元化需求提供了有力支持。

【2.山山客多开的原理与技术细节】

山山客多开的核心原理是采用多线程技术,实现多个客户端的同时访问。具体来说,当用户启动山山客多开软件后,软件会在后台自动为用户分配多个虚拟客户端,每个虚拟客户端可以独立访问网络资源。这样一来,用户可以在一个窗口内同时操作多个客户端,从而实现快速、高效地上网。

在技术细节方面,山山客多开采用了以下几种技术:

1) 多线程技术:通过多线程实现多个客户端的同时访问,提高了访问速度和效率。

2) 虚拟化技术:为每个客户端分配一个独立的虚拟环境,确保客户端之间的互不干扰。

3) 资源管理技术:有效地分配和调度系统资源,确保多个客户端的稳定运行。 第 2 页 共 2 页 【3.山山客多开的应用场景与实践案例】

山山客多开在实际应用中具有广泛的场景,例如:

1) 网络营销:通过山山客多开,营销人员可以同时管理多个社交媒体账号,提高信息发布的效率和覆盖面。

2) 网络游戏:玩家可以利用山山客多开同时运行多个游戏客户端,实现快速切换和便捷操作。

3) 在线教育:教师可以利用山山客多开同时访问多个教学平台,方便管理和教学。

【4.山山客多开的发展前景与挑战】

随着互联网的快速发展,山山客多开在未来有着广阔的发展前景。然而,它也面临着一些挑战,如:

1) 安全性:如何确保客户端的数据安全和隐私保护,是山山客多开需要不断研究和改进的问题。

2) 兼容性:随着网络技术的不断演进,如何保证山山客多开能够适应各种新出现的网络环境和应用,也是一个挑战。

数字采集系统中关键技术的研究和实现

数字采集系统中关键技术的研究和实现

电子测量技术 ELECTR0NIC M_EASURE^缸 NT TECHNOLOGY 第29卷第3期 

2006年6月 

数字采集系统中关键技术的研究和实现 

龚 成 朱 杰 

(上海交通大学电子工程系上海200030) 

摘要:本文介绍了数字采集软件系统中一些关键技术的实现,包括:面向对象的封装技术、基于CFormView 

的用户界面优化技术、多线程和线程同步技术。这些技术的运用使数字采集软件系统的易用性、可靠性和可扩 

展性得到了提高。 

关键词:面向对象;多线程;用户界面 

Research and.implementation of key techniques in data acquisition software system 

Gong Cheng Zhu Jie 

(Shanghai Jiaotong University,Department of Electronic Engineering,Shanghai,200030) 

Abstract:Some key techniques in data acquisition software system are introduced,which are object oriented packing 

technique,user interface optimization based on CFormView,multithreading and thread synchronization.With the 

use of these techniques,the ease of use,reliability and expansibility of the data acquisition software system are 

improved. 

Keywards:object oriented;multithreading;user interface 

NetFlow流量采集与聚合的研究实现

NetFlow流量采集与聚合的研究实现

NetFlow流量采集与聚合的研究实现

郭剑云;曹庆华

【摘 要】为实现对局域网络的流量监测与异常分析,提出一套基于NetFlow的大流量数据采集与聚合方案.该方案使用缓冲区和多线程机制米采集NetFlow数据,有效提高数据采集效率和稳定性.在原始数据的基础上,采用一整套聚合策略对数据进行处理和存储,以满足实时流量和历史流量的监测.该方案可对纷繁复杂的原始流量信息进行有效整理,为前端各种流量分析提供合理高效的数据支持.以此方案为基础的网络流量监测系统已实际运用于大型网络中.

【期刊名称】《现代电子技术》

【年(卷),期】2009(032)007

【总页数】4页(P177-180)

【关键词】NetFlow流量监测;流量采集;流量聚合;多线程

【作 者】郭剑云;曹庆华

【作者单位】北京航空航天大学,计算机学院,北京,100083;北京航空航天大学,计算机学院,北京,100083

【正文语种】中 文

【中图分类】TN915

0 引 言

近年来,随着信息技术的飞速发展,越来越多的企业和大型机构在其内部构建基于网络的应用,复杂程度及对网络的依赖程度日益提高,各种各样的网络问题也随之产生。网络流量监测是网络管理和系统管理的一个重要组成部分,网络流量数据为网络的运行和维护提供了重要信息。这些数据对网络的资源分布、容量规划、服务质量分析、错误监测与隔离、安全管理都十分重要。因此,对网络流量及相关情况实施科学合理的监管和深入分析,成为网络管理的重要环节之一;同时,它也为网络问题提供有效解决方案及进行网络的规划。

目前的网络流量分析方法主要有基于SNMP、基于实时抓包分析、基于网络探针和基于Flow技术等几种。NetFlow基于Flow技术,目前已得到大多数网络设备厂商的支持,提供了网络监测方面非常完善的应用。基于NetFlow的流量采集方法可以获得包括源/目的主机IP、应用协议类型、源/目的端口等详细信息,根据这些信息就可以对协议(应用)、主机IP(用户)以及AS域等进行统计排行和趋势分析,也可对异常流量进行监测分析。此外,NetFlow避免了大量部署和配置监测探针的复杂过程,使得网络性能分析更加全面、灵活且简单易用。

经典进程同步问题的研究与实现

经典进程同步问题的研究与实现

第27卷 

Vo1.27 第12期 

NO.12 计算机工程与设计 

Computer Engineering and Design 2006年6月 

June 2006 

经典进程同步问题的研究与实现 

王文磊, 徐汀荣 

(苏州大学计算机科学与技术学院,江苏苏州215006) 

摘 要:简单介绍了Windows环境下进行多线程编程的意义,分析了多线程机制的原理和多线程中资源共享所带来的问题, 

重点讨论了C++Builder6环境下开发多线程应用程序这一问题,对多线程的资源共享和并发控制技术进行了深入的分析,并 

通过实现生产者一消费者问题、读者一写者问题以及哲学家共餐问题等经典进程同步问题更好地理解程序并发过程中的同 

步机制和交互通信机制及其实现方法。 关键词:多线程;同步;生产者一消费者;读者一写者;哲学家共餐 

中图法分类号:TP31l 文献标识码:A 文章编号:1000-7024(2006)12—2248-03 

Study and realization of synchronous problem in classical process 

WANG Wen-lei,XU Ting-rong 

(College of Computer Science and Technology,Soochow University,Suzhou 2 1 5006,China) 

Abstract:The uses ofmulti—threaded programming in Windows are simply introduced.Multithread mechanism and the problems during multithread resource share are analyzed.Multithread application program methods in C++Builder6 environment are discussed in detail. Meanwhile the resource-sharing and synchronizing control technique are analyzed,which help to understand the concurrent mechanism 

线程池技术在银行核心系统中的应用

据 

息 

1.引言 

银行核心业务系统是一个综合处理银行各项柜面业务 

的应用系统。它涵盖了银行本外币储蓄、信用卡、对公存贷 

款业务,银行汇票及联行业务,国际结算和外汇买卖,代收 

代付业务,各类客户自助银行业务的账务处理。核心业务系 

统是银行构建经营管理和金融服务体系的基础应用平台。 

在银行核心业务系统所要处理的业务中,有相当大一部分 

需要进行大数据量的处理。比较典型的如批量结息,动辄千 

万条数据,并且需要在短时间内处理完毕,以防止产生系统 

瓶颈和影响其它业务模块。采用多线程技术,首先创建线程 

池,将大量的需要进行业务处理的账户分组,每组账户调用 

一个空闲的线程来进行并行处理,充分利用服务器的并行 

能力,有效地提高大数据量处理业务的运行速度,提高整个 

系统的性能。 

2.开发相关技术 

2.1 iava的多线程技术 

线程是进程中可以乱序执行的代码流程。当多个线程 

同时运行的时候,这样的执行模式成为并发执行。使用多线 

程技术的目的是为了最大限度地利用CPU资源。 

在iava中,线程是一个对象,它可以存储数据,发送消 

息。线程类必须实现一个run方法,在线程取得CPU的访问 

权以后,就可以执行run方法中的指令。线程在休眠、阻塞和 

超时的情况下会失去对CPU的访问。 

2.2线程池 

线程池就是进程在运行的过程中创建一定数量的线 

程,并放入到~个“池子”中,当有需要线程的请求到达时, 

并不创建一个线程为其服务,而是从“池子”中选择一个空 

闲的线程为请求服务,服务完毕后,线程进入空闲状态。如 

果客户同时请求的数目比线程池设置的最大线程数大,可 

以将请求进行排队。 

利用线程池后,创建线程和销毁线程的开销几乎可以 

忽略不计,加快了服务器的响应时间,同时防止了当数据量 太大时,服务器应用程序可能崩溃的现象。 OFBIZ是由Sourceforge维护的一个最著名的开源项目 

之一,提供创建基于最新J2EE/XML规范和技术标准,构建 

PPAT:一种Pthread并行程序线程性能分析工具

PPAT:一种Pthread并行程序线程性能分析工具

温莎莎;刘轶;刘弢;宋平;李博;钱德沛

【摘 要】随着多核/众核处理器技术的快速发展,程序需要越来越多地采用多线程并行技术以提升性能。随着线程个数的增多,线程并行运行过程中相互间同步/互斥及资源竞争关系更加复杂,导致程序性能优化的难度增大。为了使编程人员直观地了解线程的动态运行过程,特别是线程间同步及资源共享带来的影响,帮助其进行程序性能优化,设计实现了一种面向Pthread的并行程序线程性能分析工具PPAT(Pthreadsprogramanalysistool),该工具可在程序运行过程中动态获取线程运行及线程间互斥/同步信息,生成线程通信图,并以多种可视化的方法显示,为编程人员优化程序性能提供依据。

【期刊名称】《计算机应用与软件》

【年(卷),期】2012(000)011

【总页数】6页(P43-47,115)

【关键词】众核处理器;多线程;资源共享;资源竞争;性能优化

【作 者】温莎莎;刘轶;刘弢;宋平;李博;钱德沛

【作者单位】北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191

【正文语种】中 文 【中图分类】TP31

0 引言

近年来,多核处理器技术快速发展,并呈现向众核方向发展的趋势。Intel以及AMD都相继推出了多核的高端处理器,Intel的Knights Corner处理器核数可以达到50核,甚至更多。与此同时,Pthreads、OpenMP、MPI这些传统的并行编程语言已日渐成熟,CIlk、TBB等一些并行编程模型也逐渐面向市场。在这些并行编程语言及模型中,多线程仍是实现并行的主要方式。线程的分配数量、任务的派发以及在硬件资源上的调度与并行程序的执行性能密切相关。

基于AOP技术的通用线程监控平台GTMP

󰀁󰀁收稿日期:2006󰀁08󰀁09;修返日期:2007󰀁04󰀁17󰀁󰀁基金项目:国家󰀂973 计划资助项目(2005CB321804)󰀁󰀁作者简介:张瞩熹(1981󰀁),男(满族),北京人,硕士研究生,主要研究方向为分布计算(zhangyishan_11@hotmai.lcom);郭长国,男,副研究员,

主要研究方向为分布计算;苑洪亮,男,博士研究生,主要研究方向为分布计算、可靠性系统;王怀民,男,教授,博导,主要研究方向为分布对象技术、网络安全、智能agent.基于AOP技术的通用线程监控平台GTMP*

张瞩熹1,郭长国2,3,苑洪亮2,王怀民2

(1.总后后勤科研所,北京100071;2.国防科学技术大学计算机学院网络技术与信息安全研究所,长沙

410073;3.总参第61研究所软件中心,北京100039)

摘󰀁要:提出并实现了基于AOP技术的通用线程监控平台。借助AOP的需求空间分离实现技术,使用该平台

的原系统不必事先具有监控能力,该平台可以在不手动改变系统源代码的情况下通过工具自动植入系统内部,

为系统注入监控功能,实现对运行线程信息的监视和对指定线程运行速度的变换,实现对整个系统运行行为的

控制。

关键词:面向方面编程;线程监控;AspectC++

中图分类号:TP339󰀁󰀁󰀁文献标志码:A󰀁󰀁󰀁文章编号:1001󰀁3695(2007)10󰀁0249󰀁02

Generalthreadmonitorplatformbasedonaspect󰀁orientedprogramming

ZHANGZhu󰀁xi1,GUOChang󰀁guo2,3,YUANHong󰀁liang2,WANGHuai󰀁min2

(1.GeneralLogistics,LogisticsResearchInstitute,Beijing100071,China;2.SchoolofComputerScience,NationalUniversityofDefenseTech󰀁nology,Changsha410073,China;3.SoftwareCenter,The61stInstituteofGeneralStaff,Beijing100039,China)

数据保护技术在多线程应用程序开发中的应用研究

《工业控制计算机}201 1年第24卷第12期 13 数据保护技术在多线程应用程序开发中的应用研究 Data Protection Technology in Development of Multithread PrOgram 李 晖 (中国航天科技集团公司第四研究院第四十一研究所 燃烧、流动和热结构国家级重点实验室,陕西西安710025) 摘 要 正确使用多线程技术能够更好地开发并发性任务和提高测控系统性能,在避免系统阻塞和减少系统运行时间方面有 着明显优点。详细介绍了LabWindows/CVI环境中多线程机制以及线程池中关键的数据保护技术,设计了一个实例程 序,同时实现了线程池、数据保护、异步定时器等多线程技术,实例同时说明了通过不同方法访问线程安全变量的差异。 关键词:LabWindows/CVl,数据保护,多线程,线程安全变量 Abstract This paper introduces sufficiently the multithreading mechanism in LabWindows/CVl and the critical data protection tech— nology in thread pool,designs a prog ram which realizes simultaneously the thread pool,the data protection and the asyn— chronous timer.The program also explains the differences between the two methods to access to the thread—safe variable. Keywords:LabWindows/CVl,data protection,mult{lhread}ng,thread—safe variable 本文详细介绍了CVI环境中的多线程机制以及线程池中关 键的数据保护技术,设计了一个实例程序,同时实现了线程池、 数据保护、异步定时器等多线程技术,说明了数据保护在多线程 应用程序开发中的重要性,实例同时展现了通过Get/SetVar— Name和GetPointerToVarName两种方式访问线程安全变量 的差异。 1 数据保护重要性 1.1 CVI下的多线程机制 与Windows SDK提供的多线程API相比,CVI提供了更 加完备易用的多线程函数库,如Thread Pool、Thread Safe Variable、Asynchronous Timer等,用户可以在Utility Library —Multithreading下的库函数树状图中找到所有多线程函数。 在CVl单线程应用程序中,当用户告诉操作系统开始执行 程序时,操作系统就创建主线程并开始运行程序。而在一个多线 程应用程序中,除了主线程以外的其他线程都是在应用程序通 知操作系统时操作系统才创建并执行线程,这些线程都被叫做 次线程。应用程序都是从主线程中的main或WinMain函数开 始执行,而次线程的执行和停止则完全由程序开发者决定。 而在CVl多线程应用程序中,总是用主线程来创建、显示和 运行用户界面,用次线程来实现其他具有实时性要求的操作,比 如数据采集。CVl提供了两种用于次线程开发的高级机制:线程 池和异步时钟。其中线程池适合需要在一个不连续时间段或在 一个循环内执行的任务,而异步时钟适合在固定时间间隔内执 行的任务。 1l2数据保护重要性 在多线程应用程序开发中,开发者必须保护那些可以同时 被多个线程访问的全局变量、静态局部变量和动态内存分配变 量。这些变量如果不能被妥善保护,经常会引起间断性的逻辑错 误,CVl提供了多种高级别的保护机制来避免数据被多个线程 同时访问。 以下举个常见例子说明数据保护的重要性。在一个多线程 应用程序中,有两个线程Thread1、Thread2都使同一个全局整 型变量Count增1(假定Count初始值为5),则两个线程函数 都有如下的语句: ’ Count+4- 正常情况下,Thread 1和Thread 2执行上面这条语句的 CPU指令流程应该分别如下图1(a)、(b)中实线箭头所示, Thread1和Thread2两个线程对这条语句的执行互不干扰,也 就是说两个线程执行完后Count的值应该等于7。 然而操作系统可能会在任意一点处打断一个线程,Thread1 和Thread2都执行Count++,那么很可能会按照图1中虚线所 示的指令流程来执行。可以发现CPU在执行完Thread 1的 Step 1后其Count=5,Register1=5;接着CPU没有接着执行 Thread1的Step2,而是被安排去执行Thread 2的Step1,执 行完后,Count=5,Register2=5;CPU在执行完Thread2的 Step3后Count=6,Register2=6,接着才被安排去执行Thread 1的Step2,执行完Step2后Count=6,Register1=6;所以导致 执行完Thread 1的Step3后Count等于6而不是7。 … 薯 ,一/一、. 椒… 薯 n s CoIlnt j. J cI11lnt 5, c。l1n 一 、\ 一 Connt=5, 。 tt e r 1 = 6 : .曩: !. . 、、i : v R eg i s te,r 2=6Step 3 : 。 【 u uI l}{ ‘ lll・ul1t坐 }『 tep 图1 Thread1和Thread2 CPU指令流程示意图 由此可见,虽然开发者在Thread 1和Thread 2中都写了 Count++的语句,但是由于Thread 1在使Count变量内的值 增1之前被线程2打断,使得最终Count的值是6而不是7。这 种失败也没有什么规律可循,

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档