2013-07-26 54 views
0

我知道StackWalk64像所有dbghelp函數一樣是單線程的,因爲它在MSDN文檔中有明確說明。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms680650(v=vs.85).aspxCaptureStackBackTrace單線程?

「所有DbgHelp函數,比如這個,都是單線程的,因此,從多個線程調用這個函數可能會導致意外的行爲或內存損壞,爲了避免這種情況,您必須同步所有併發調用從多個線程到這個函數。「

然而,CaptureStackBackTrace的MSDN文檔http://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx並沒有說明CaptureStackBackTrace是否是單線程的。

非常感謝您的快速回答。

+0

您可能表示線程安全,而不是單線程。您真的不在乎CaptureStackBackTrace是否使用多個線程來完成其任務。你關心的是如果從多個線程調用是安全的。 – agbinfo

+0

我會認爲''StackWalk64()'如果它正在執行調用線程的堆棧,它將是線程安全的。但是如果它正在走另一個線程的堆棧,那麼它需要同步纔有意義。 –

回答

1

由於沒有其他提及,因此您可以安全地假設CaptureStackBackTrace是線程安全的。這是Windows API函數的默認設置。除非另有說明,否則它們是線程安全的。

+6

與'StackWalk64()'不同,''CaptureStackBackTrace()'不支持走另一個線程的堆棧,只支持調用線程的堆棧。所以它是線程安全的,因爲調用線程不必與自己同步。 –