全国客户服务:4006-054-001 疑难解答:159-9855-7370(7X24合作/咨询),173-0411-9111/155-4267-2990(售前),座机/传真:0411-83767788,微信:543646
上一张 下一张

基金项目要保留_论文发表__期刊目录网,论文发表

基金项目要保留 Delphi多线程编程中同步机制的分析与研究 胡丹桂 武汉职业技术学院计算机学院湖北武汉430074 基金项目: 湖北省教育厅2008年度人文社会科学研究项目重点项目编号200

4006-054-001 立即咨询

基金项目要保留_论文发表__期刊目录网,论文发表

发布时间:2022-10-04 09:31 热度:

基金项目要保留_论文发表__期刊目录网,论文发表


  基金项目要保留
  Delphi多线程编程中同步机制的分析与研究
  胡丹桂
  武汉职业技术学院计算机学院湖北武汉430074
  基金项目:
  湖北省教育厅2008年度人文社会科学研究项目重点项目编号2008d154
  项目名称:高等职业院校《Delphi程序设计》教学改革研究
  项目主持人武汉职业技术学院计算机学院何定华
  摘要:Delphi封装了一个类:TThread,使用这个类可以很方便的实现多线程编程。多线程编程可以带来很多好处,但同时也存在不少问题,线程同步就是多线程编程中一个非常关键及重要的问题。Delphi提供了多种同步对象来完成线程的同步,下面就Delphi多线程编程中如何实现同步机制来进行分析与研究。
  关键字:线程同步Synchronize临界区
  1概述
  线程本质上是进程中一段并发运行的代码。一个进程至少有一个线程,即所谓的主线程。同时还可以有多个子线程。当一个进程中用到超过一个线程时,就是所谓的“多线程”。Delphi在Classes单元中对线程作了一个较好的封装,这就是VCL的线程类:TThread。这个类基本用法是:先从TThread派生一个自己的线程类(因为TThread是一个抽象类,不能生成实例),然后是Override抽象方法:Execute(这就是线程函数,也就是在线程中执行的代码部分)。
  多线程同步工作时,如果同时调用相同的资源,就可能会出现问题,一般读出是不会有问题的,但是,如果写入(全局变量、数据库),就会发生冲突,甚至产生死锁和竞争问题。
  以加一为例:
  一般来说,对内存数据加一的操作分解以后有三个步骤:
  1、从内存中读出数据
  2、数据加一
  3、存入内存
  现在假设在一个两个线程的应用中进行加一操作可能出现的一种情况:
  1、线程A从内存中读出数据(假设为3)
  2、线程B从内存中读出数据(也是3)
  3、线程A对数据加一(现在是4)
  4、线程B对数据加一(现在也是4)
  5、线程A将数据存入内存(现在内存中的数据是4)
  6、线程B也将数据存入内存(现在内存中的数据还是4,但两个线程都对它加了1,应该是5才对,所以这里出现了错误的结果)。
  由此可见,多线程编程中研究多线程的同步机制就显得非常重要。
  2同步机制
  同步机制,实际上是事件驱动机制,意思是让线程平时处于“休眠”状态,除非发生某个事件才触发。线程的同步包括许多方面的内容,Delphi和Windows提供了许多方法,可以非常容易地实现线程的同步。
  2.1使用Synchronize方法
  在Delphi的多线程编程中,各种VCL构件都是临界资源,只能由主线程使用。其它线程要使用这些VCL构件,必须使用Synchronize方法,通过传递使用了VCL构件的方法,可避免多线程与VCL构件的冲突,避免重入问题。该过程带有唯一一个TThreadMethod类型的参数是一个不接收参数的对象方法,用于指定在线程对象中的方法。
  其方法的应用是:
  第一步:把访问主窗口(或主窗口控件资源)的代码放到线程的一个方法中;
  第二步:是在线程对象的Execute方法中,通过Synchronize方法使用该方法。
  实例:
  procedureTThreadMethodObject.Execute;
  begin
  Synchronize(update);
  end;
  procedureTThreadMethodObject.update;
  begin
  .........
  end;
  这里通过Synchronize使线程方法update同步。
  2.2使用VCL类的Lock方法
  在Delphi的IDE提供的构件中,有一些对象内部提供了线程的同步机制,工作线程可以直接使用这些控件,比如:Tfont,Tpen,TBitmap,TMetafile,Ticon等。另外,一个很重要的控件对象叫TCanvas,提供了一个Lock方法用于线程的同步,当一个线程使用此控件对象的时候,首先调用这个对象的Lock方法,然后对这个控件进行操作,完毕后再调用Unlock方法,释放对控间的控制



基金项目要保留_论文发表__期刊目录网,论文发表


SCI学术指导


基金项目要保留_论文发表__期刊目录网,论文发表
公司地址:大连市高新园区黄浦路科技创业大厦19层 运营中心:大连市沙河口区金盾路127号 研发中心:大连市西岗区大工西岗科创产业园10层 邮政编码:116029
全国客户服务热线:4006-054-001 微信咨询:543646 业务咨询、合作:159-9855-7370(同微信) / 173-0411-9111 电子邮件:Djy@Jiqunzhihui.com
集群智慧®为我公司注册商标,在商标国际分类第1、7、9、11、20、30、35、36、37、38、40、41、42、44、45类用途中受法律保护,侵权必究。侵权删除:2544906@QQ.com
本企业已通过ISO9001国际质量管理体系认证、ISO45001职业健康安全管理体系认证、ISO14001环境管理体系认证、企业信用等级AAA级认证、科技型中小企业认证、高新技术企业认证。
本站部分服务由本平台认可的第三方服务机构提供,如服务的质量有任何问题,请第一时间向我平台反馈,我们将及时为您解决,平台保障用户的全部权益不受任何损害。
请认准本站网址(www.jiqunzhihui.org.cn),推荐百度搜索“集群智慧云科服”直达本站。
版权所有:大连集群智慧科技服务有限公司 ICP备案:辽ICP备2021010330号-3 增值电信业务经营许可EDI证:辽B2-20230179 D-U-N-S邓白氏全球编码:620550735 手机版