"Профиль, не спекулируйте."(DJB)
Ответ на этот вопрос зависит от слишком многих вещей, и общего ответа нет.Роль разработчика заключается в том, чтобы иметь возможность принимать эти решения.Если вы не знаете, попробуйте варианты и измерить.Во многих случаях разница не будет иметь значения, и проблемы с производительностью будут доминировать.
«Преждевременная оптимизация - корень всех зол, скажем, 97% времени» (DEK)
Обновление в ответ на вопрос edit:
Библиотеки C ++, как правило, не используют магию, чтобы избежать примитивов синхронизации.Асинхронный и синхронный интерфейсы, вероятно, будут обертками вокруг вещей, которые вы все равно будете делать.Обработка должна происходить в контексте, и если о завершении нужно сообщить в другом контексте, для этого потребуется примитив синхронизации.
Конечно, могут быть и другие соображения.Если ваша библиотека C ++ взаимодействует с каким-то оборудованием, которое может выполнять обработку, все может быть иначе.Но вы не говорили нам ни о чем подобном.
Ответ на этот вопрос зависит от контекста, который вы нам не дали, включая информацию об интерфейсе библиотеки и структуре вашего кода.