Требования к синхронизации для функций DbgHelp

Недавно я реализовал утилиту для записи дампов пользовательского режима, используя MiniDumpWriteDump (часть Библиотека справки по отладке). Реализация разделена на собственный процесс. Целевой процесс может запустить эту утилиту и связаться с ней, чтобы инициировать запись минидампа.

Это все работает, как ожидалось. Я не уверен, однако, как интерпретировать правила в отношении параллелизма для MiniDumpWriteDump:

Все функции DbgHelp, такие как эта, являются однопоточными. Следовательно, вызовы из более чем одного потока в эту функцию могут привести к неожиданному поведению или повреждению памяти. Чтобы избежать этого, вы должны синхронизировать все одновременные вызовы из более чем одного потока с этой функцией.

Относится ли вышеизложенное к вызовам из разных потоков на один процесс? Или же одновременные вызовы также требуют синхронизации, если MiniDumpWriteDump вызывается в разных процессах (например, когда каждый целевой процесс запускает свой собственный служебный процесс)?

-1

Решение

Проблема в в библиотеке: «Все DbgHelp функции, такие как эта, являются однопоточными «.

Поэтому любой процесс, вызывающий эту библиотеку, должен убедиться, что только один отдельный поток использует DbgHelp функционирует одновременно.

Просто используйте замок, прежде чем использовать DbgHelpесли ваша программа использует DbgHelp является многопоточным (в противном случае нет проблем).

Другой способ снять это ограничение — добавить (для каждого потока) context к DbgHelp библиотека: вы перемещаете все (file-scope) static и (объем программы) global переменные в структуре C передаются в качестве аргумента всем вызовам библиотечных функций.

1

Другие решения


По вопросам рекламы [email protected]