У меня есть приложение C ++, работающее на winapi. Портативность не проблема. Все, что я хочу, это максимальная производительность. У меня есть базовое c понимание проблем многопоточности и синхронизации, но ограниченный опыт работы с множеством вариантов, от winapi через потоки C ++ до сторонних библиотек.
В критическом ядре производительности моего приложения я определил все oop, который можно распараллелить. Мне удалось разделить l oop на 4 части, которые не зависят друг от друга. Я хотел бы делегировать работу 4 потокам, работающим параллельно. Основной поток должен дождаться, пока все 4 потока выполнят свою работу, прежде чем он продолжится.
Звучит очень просто. Однако в настоящее время l oop занимает всего около 10 микросекунд при работе на одном потоке. Боюсь, что методы синхронизации, которые вызывают переключение в ядро (события, мьютексы и т. Д. c.), Вызовут больше издержек, чем может сэкономить распараллеливание. SRWLocks + условные переменные утверждают, что они очень легковесны, но я не нашел способа решить мою синхронизацию с этими инструментами.
Конечно, я мог бы протестировать все виды API-интерфейсов синхронизации, но я уверен, что это было сделано раньше.
Поэтому мой вопрос: есть ли разумный способ синхронизации очень коротких задач и если да, то каковы соответствующие инструменты?