开发线程安全的 COM 代码
在多线程编程中,确保代码的线程安全性至关重要。本文将介绍一些开发公寓安全和线程安全的 COM 代码的常见技术。
共享数据冲突
当多个线程同时访问同一内存位置或其他资源时,开发者需要提供明确的同步机制来确保对共享资源的安全访问。以下是几种常见的解决方法:
使用主单线程单元(Main STA)
不指定类的 ThreadingModel 属性,让 COM 自动同步访问。这样 COM 会在主 STA 中创建所有对象,由于只有一个线程访问主 STA,避免了多线程间的数据共享。但这种方法存在性能损失,因为每个方法调用都需要封送回主 STA 线程。
使用单线程单元(STA)
将 ThreadingModel 标记为 Apartment ,COM 会将组件提供的每个对象放入一个 STA 中,实现对象的序列化。虽然能保护对象状态不被并发访问,但多个对象间的共享数据仍需开发者使用适当的同步原语进行保护。
以 Win32 同步原语中的临界区为例,ATL 提供的 CComAutoCriticalSection 类简化了临界区的使用。以下是保护全局变量 g_nCount 的示例代码:
CComAutoCriticalSection g_myCS;
long g_nCount = 500;
STDMETHODIMP CMyCount::GetCount(long
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



