Проблема
Есть набор макросов:
Есть набор макросов:
#define DBGPRINT(Level, Prefix, Fmt) \ { \ if ((Level) >= gDbgLevel) \ { \ DbgPrint(DBGPRINT_PREFIX": %s", Prefix); \ DbgPrint Fmt; \ } \ } #define TERSE_FN(Fmt) DBGPRINT(DBG_LEVEL_TERSE, __FUNCTION__"(): ", Fmt)Данные макросы позволяют выводить отладочную информацию в формате:
MyPrefix: FunctionName(): FormattedMessageНа первый взгляд всё нормально. Но если TERSE_FN вызывается из двух потоков:
Thread 1: TERSE_FN(("Important message with status: %x\n", status)); Thread 2: TERSE_FN(("Another important message with status: %x\n", status));вывод может быть неконсистентным из за асинхронного использования DbgPrint:
MyPrefix: MyPrefix: Function2(): Another important message with status: 00000000 Function1(): Important message with status: 00000000Решение