单线程: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对象思路方法时都要评估这个思路方法会不会产生“重入问题”如果发生“重入问题”这个思路方法内执行环境(变量或循环结构等)是否会被改变或破坏是否需要对其他地方代码进行调整如果是这样“重入问题”比“同步问题”轻松不了多少

Tags:  什么叫单线程 什么是单线程 单线程与多线程 单线程

延伸阅读

最新评论

发表评论