gpt4 book ai didi

c++ - 在不同的线程上解除分配 BSTR 是否安全?

转载 作者:可可西里 更新时间:2023-11-01 09:24:04 25 4
gpt4 key购买 nike

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

示例代码:

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();

最佳答案

MSDN 没有明确说明,但是仍然有引用资料表明 Sys*String 函数正在使用 IMalloc 的操作系统实现,通过 CoGetMalloc和 friend 。

Automation may cache the space allocated for BSTRs. This speeds up the SysAllocString/SysFreeString sequence. However, this may also cause IMallocSpy to assign leaks to the wrong memory user because it is not aware of the caching done by Automation.

COM 实现 is thread safe :

Generally, you should not implement IMalloc, instead using the COM implementation, which is guaranteed to be thread-safe in managing task memory. You get a pointer to the COM task allocator object's IMalloc through a call to the CoGetMalloc function.

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

关于c++ - 在不同的线程上解除分配 BSTR 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com