【问题标题】:Synchronization requirements for DbgHelp functionsDbgHelp 函数的同步要求
【发布时间】:2015-06-17 13:21:49
【问题描述】:

我最近实现了一个实用程序来使用MiniDumpWriteDumpDebug Help Library 的一部分)编写用户模式转储。实现被分离成它自己的进程。目标进程可以启动此实用程序并与之通信以触发写入小型转储。

这一切都按预期工作。不过,我不确定如何解释MiniDumpWriteDump 的并发规则:

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

以上是指不同线程对单个进程的调用吗?或者如果在不同进程中调用MiniDumpWriteDump(例如,当每个目标进程启动自己的实用程序进程时),并发调用是否也需要同步?

【问题讨论】:

    标签: c++ c winapi concurrency dbghelp


    【解决方案1】:

    问题在于在库中“所有DbgHelp 函数,例如这个,都是单线程的”

    因此,任何调用此库的进程都必须确保只有一个线程同时使用DbgHelp 函数。

    在使用DbgHelp之前使用锁,也就是说,如果你使用DbgHelp的程序是多线程的(否则没有问题)。

    消除此限制的另一种方法是将(每个线程)context 添加到 DbgHelp 库:您将所有(文件范围)static 和(程序范围)global 变量移入作为参数传递给所有库函数调用的 C 结构。

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 2017-05-15
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2020-12-31
      • 2012-07-25
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多