设为首页 加入收藏

TOP

COM编程中“STA单线程套间”重入问题
2014-11-23 21:36:49 】 浏览:699
Tags:COM 编程 STA 线程 套间 问题

  在COM编程中,COM线程模型的选择是避免不了的。网上已有大量介绍“COM线程模型”的文章,在这里我只想说“STA 单线程套间”并不像想象中的那么简单,在实际的开发中会出现“重入问题”。
  “STA 单线程套间”,指的是一个线程只能建立一个套间,在线程中创建的COM对象只属于这个套间,其他线程对此线程中COM对象的调用都必须通过代理对象串行调用。这样,“STA 单线程套间”轻松解决了多线程之间的“同步问题”。
  于是,我们将COM对象都采用“STA 单线程套间”,是不是就万事大吉了呢?当然不是。为了避免死锁,所有的COM套间类型都支持重入,当然“STA 单线程套间”也不例外。当套间中的线程通过代理调用到其他套间中的对象的时候,调用者线程在等待此调用完成的过程中,它可以继续处理其他的入方法请求。


  例如,线程1中的对象a访问线程3中的对象c,对象c又访问线程4中的对象d。此时,线程4在处理传入的调用,线程3在等待线程4返回,线程1在等待线程3返回。由于“STA 单线程套间”支持重入,所以,此时当线程2中的对象b发起对线程3中对象c的访问时,就会立即执行。于是,线程3中的对象c就面临着“重入问题”的考验。
在一个多线程的程序中,这种“重入问题”的发生可能无处不在。如果我们忽视了这个问题的存在,那么在后续的开发中就会遇到许多莫名其妙的问题,而且极难纠错。因为,我们的逻辑是对的,只是“重入问题”的发生,会将代码的执行环境(变量或循环结构等)改变或破坏,使得程序无法再进行下去,或产生错误的结果。
想象一下,我们在每实现一个COM对象的方法时,都要评估这个方法会不会产生“重入问题”,如果发生“重入问题”,这个方法内的执行环境(变量或循环结构等)是否会被改变或破坏,是否需要对其他地方的代码进行调整。如果是这样的话,“重入问题”比“同步问题”轻松不了多少。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇计算机二级C++辅导:理解Windows消.. 下一篇在16色模式下显示256色及全彩色

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目