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

COM编程中“STA单线程套间”重入问题,第1张

COM编程中“STA单线程套间”重入问题,第2张

在COM编程中,COM线程模型的选择是必然的。网上有很多关于“COM线程模型”的文章。这里我只想说“STA单线程套件”没有想象中那么简单,实际开发中会出现“重入问题”。
“STA单线程套件”是指一个线程只能建立一个套件,线程中创建的COM对象只属于这个套件。所有其他线程对该线程中COM对象的调用必须通过代理对象连续进行。这样,“STA单线程套件”轻松解决了多线程之间的“同步问题”。
所以,我们对所有COM对象采用“STA单线程套件”。一切都好吗?当然不是。为了避免死锁,所有的COM套件类型都支持重入,STA单线程套件也不例外。当一个套件中的线程通过代理调用另一个套件中的对象时,调用方线程可以继续处理其他传入的方法请求,同时等待调用完成。

例如,线程1中的对象A访问线程3中的对象C,后者又访问线程4中的对象D。此时,线程4正在处理来电,线程3正在等待线程4返回,线程1正在等待线程3返回。因为STA单线程套件支持重入,所以当线程2中的对象B发起对线程3中的对象C的访问时,会立即执行。因此,线程3中的对象C面临着“重入问题”的考验。
在多线程程序中,这种“可重入问题”可能到处都会发生。如果忽略了这个问题的存在,那么在后续的发展中就会遇到很多莫名其妙的问题,并且极难改正。因为,我们的逻辑是正确的,但是“重入问题”的发生会改变或破坏执行环境(变量或循环结构等。)导致程序无法继续运行,或者产生错误的结果。
试想一下,我们每实现一个COM对象的方法,都要评估这个方法是否会导致“重入问题”。如果一个“可重入问题”发生,将执行环境(变量或循环结构等。)内的代码被更改或销毁,以及其他地方的代码是否需要调整。如果是这样,“再入问题”并不比“同步问题”容易多少。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » COM编程中“STA单线程套间”重入问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情