【问题标题】:Is CaptureStackBackTrace single threaded?CaptureStackBackTrace 是单线程的吗?
【发布时间】:2013-07-27 02:29:22
【问题描述】:

我知道 StackWalk64 像所有 dbghelp 函数一样是单线程的,正如 MSDN 文档中明确说明的那样。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms680650(v=vs.85).aspx

“所有 DbgHelp 函数,例如这个,都是单线程的。因此,从多个线程调用此函数可能会导致意外行为或内存损坏。为避免这种情况,您必须同步来自多个线程的所有并发调用这个函数不止一个线程。”

但是,CaptureStackBackTrace 的 MSDN 文档,http://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx 并没有说明 CaptureStackBackTrace 是否是单线程的。

我们非常感谢您快速回答。

【问题讨论】:

  • 您的意思可能是线程安全而不是单线程。您真的不在乎 CaptureStackBackTrace 是否使用多个线程来完成其任务。您关心的是从多个线程调用是否安全。
  • 我认为 StackWalk64() 如果它正在遍历调用线程的堆栈,它将是线程安全的。但如果它正在遍历另一个线程的堆栈,那么它需要同步是有道理的。

标签: c++ winapi stack-trace callstack backtrace


【解决方案1】:

由于没有另外提及,您可以安全地假设CaptureStackBackTrace 是线程安全的。这是 Windows API 函数的默认设置。除非另有说明,否则它们都是线程安全的。

【讨论】:

  • StackWalk64()不同,CaptureStackBackTrace()不支持遍历另一个线程的栈,只支持调用线程的栈。所以它是线程安全的,因为调用线程不必与自己同步。
猜你喜欢
  • 1970-01-01
  • 2011-10-24
  • 2020-09-19
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
相关资源
最近更新 更多