进程内com,apartment的线程安全----微软可信么?
我写了一个进程内com,apartment,
在客户端
//
CoInitialize
CoCreateInstance
启动若干线程,将接口指针传入线程,
在线程内部调用接口指针的方法,
release
coUninitialize
//
在调用接口函数的时候,发现组件函数被重入了,这说明com没有保证com的线程安全性
而微软的文档说是保证线程安全的,是我程序写错了,还是微软在骗人?
问题点数:100、回复次数:6Top
1 楼jeffchen(Jeff)回复于 2002-03-13 19:30:14 得分 30
我记得以前有这样一个帖子,微软也做了回答,是不保证完全线程安全的Top
2 楼swordchueng(换工作中)回复于 2002-03-14 09:44:11 得分 20
楼上的记性不错啊!!
楼主也应该知道,其实什么事情都没有个绝对!!Top
3 楼lwg7603(刑满释放人员)回复于 2002-03-14 10:06:11 得分 10
是不是在每个线程中都调用了CoInitialize,CoUninitialize?并且在它们之间调用接口指针的方法?应该不会吧?要是的话太可怕了!Top
4 楼niu_a(阿牛)回复于 2002-03-14 10:40:07 得分 0
to:swordchueng(意笑花痴)
不要搞神秘主义,我可是无神论者,应该搞清楚怎么样会重入,怎么样不会重入
要弄明白Top
5 楼acptvc(微软全球技术中心 VC技术支持)回复于 2002-03-14 11:04:18 得分 30
从编程角度来说,COM只是一套编程的规范。当你按照COM的规范来写代码的时候,COM runtime保证你的代码不出问题;反之,如果你不按照COM的规范来写代码,那么COM runtime是不保证你的代码能正确得到COM库提供的服务的。拿线程的安全性来说,COM runtime通过装载合适的Proxy/stub来检查保证线程的安全性。要保证COM runtime装载合适的Proxy/stub,你必须遵守COM的线程规范。比如跨apartment的时候必须marshal接口指针而不能直接传接口指针等等。如果你直接传接口指针,COM runtime将不会装载对应的proxy,从而COM runtime的线程安全服务也就无从谈起。
-微软全球技术中心 VC技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查
(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
- ======================
Top
6 楼ripper(rIPPER)回复于 2002-03-14 22:20:35 得分 10
.net组件哪?在.net里面用com+,可以直接在线程直接传递对象引用吗?我以前试过,好像可以的sta可以保证没有问题,mta要自己写同步代码Top




