-1

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2015-06-17T14:29:45.677 回答