紧急求助!含有全局变量和静态变量的COM组件多线程调用问题

伊恩 2011-08-17 09:23:47
兄弟们:
公司有一个COM组件,Apartment型。在这个COM组件中有几个全局变量,以及几个静态变量。过去这个组件只适用于单一线程,现在,公司希望能够实现多线程安全。

我不想通过改代码来实现线程安全,如果用STA模式串行化访问COM组件是否会由于全局变量的存在而影响线程安全?

其中几个全局变量是链表型的,用于存储要进行解析的数据,如何避免一个线程向链表中加数据,还没来得及解析数据,另一个线程就又向链表中加数据,导致线程不安全的问题?

STA模式是如何处理多个线程对一个全局变量的访问的?

求解答。
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊恩 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
修改public CComObjectRootEx<CComSingleThreadModel>为
public CComObjectRootEx<CComMultiThreadModel>

在需要同步的地方使用Lock(),UnLock()方法
[/Quote]

这个CComSingleThreadModel与CComMultiThreadModel似乎与添加接口时选择组件是FREE或APPARTMENT类型有关,好像改这里不能控制STA或者MTA模式,具体含义一点也不知道,现在是靠使用COM组件的时候加锁解锁解决的。看了网上一些资料也没弄明白STA与MTA有什么不同,哎,都是菜惹的祸!
谢谢你的帮助!
fishion 2011-08-17
  • 打赏
  • 举报
回复
修改public CComObjectRootEx<CComSingleThreadModel>为
public CComObjectRootEx<CComMultiThreadModel>

在需要同步的地方使用Lock(),UnLock()方法
ouyh12345 2011-08-17
  • 打赏
  • 举报
回复
不改代码,估计不行

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧