首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在与分配BSTR不同的线程上释放BSTR是否安全?

在与分配BSTR不同的线程上释放BSTR是否安全?
EN

Stack Overflow用户
提问于 2015-07-10 12:51:20
回答 1查看 280关注 0票数 3

如果我调用一个在一个线程上返回BSTR的COM方法,那么从另一个线程调用该BSTR上的SysFreeString()安全吗?一旦COM调用完成,我将不再在第一个线程上使用BSTR,因此不应该出现任何并发问题。但是,考虑到COM与线程的关系,我不确定SysFreeString()是否依赖于在同一个线程上分配的BSTR

样本代码:

代码语言:javascript
复制
BSTR value = nullptr;
HRESULT hr = pComObject->DoSomething(&value);
if(FAILED(hr))
{
    return hr;
}

std::thread t([value] {
    // do something with value
    SysFreeString(value);
});
t.detach();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 13:35:13

MSDN并没有明确指出这一点,但是仍然有关于Sys*String函数通过CoGetMalloc和朋友使用IMalloc的OS实现的引用。

自动化可以缓存分配给BSTR的空间。这将加速SysAllocString/SysFreeString序列。但是,这也可能导致IMallocSpy将泄漏分配给错误的内存用户,因为它不知道自动化所做的缓存。

COM实现线程安全吗?

通常,您不应该实现IMalloc,而应该使用COM实现,这在管理任务内存时是线程安全的。通过调用IMalloc函数,可以获得指向COM任务分配程序对象的CoGetMalloc的指针。

总之,从另一个线程释放字符串是可以的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31341262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档