COM编程中“STA 单线程套间”重入问题

2008-08-28 09:47:20 来源:中国自学编程网 作者:佚名 点击:
在COM编程中,COM线程模型的选择是避免不了的。网上已有大量介绍“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对象的方法时,都要评估这个方法会不会产生“重入问题”,如果发生“重入问题”,这个方法内的执行环境(变量或循环结构等)是否会被改变或破坏,是否需要对其他地方的代码进行调整。如果是这样的话,“重入问题”比“同步问题”轻松不了多少。



本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月
广告信息

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203