我有一个本地的Visual C++ COM对象,我需要使它完全线程安全才能在系统注册表中合法地将其标记为“自由线程”。具体而言,我需要确保不超过一个线程同时访问对象的任何成员变量。这会使对象线程安全吗?
问题是我几乎可以肯定,我的COM对象的任何理智的使用者都不会尝试同时使用来自多个线程的对象。所以我希望解决方案尽可能简单,只要符合上述要求即可。
这是我想出来的。我添加一个互斥或临界区作为对象的成员变量。每个COM暴露的方法都会在返回控制之前在开始和释放时获取互斥锁/节。
我明白,这个解决方案不提供细粒度的访问,这可能会减慢执行速度,但因为我想同时访问不会真的发生,我不在乎这一点。
此解决方案是否足够?有一个更简单的解决方案吗?
如果您确定不会发生并发访问,为什么要使它安全?是否将它标记为自由线程有任何技术含义,或者您是否试图做到这一点只是为了确保? – Marek 2010-03-12 09:33:04
@Marek:Yeap,我需要将它标记为自由线程以避免COM强制执行编组。我很乐意将它标记为单元线程。 – sharptooth 2010-03-12 09:48:07