Программа - софт рендер, рендер таргет разделён на 4 равные части, процедура рендера одна и та же для четырёх потоков, только каждый рендерит в свой массив. Для визуализации используется API SetDiBitsToDevice, ибо она оказалась быстрее всех NET средств.
Вопрос - как синхронизировать работу потоков? Возможно ли, не сильно теряя производительность, делать это, скажем, при 60 fps?
Я пока использую общую переменную с битовыми флагами, при старте они устанавливаются в 1 для каждого потока. При рендере флаг сбрасывается в 0, после рендера поток ожидает в цикле, пока опять там не будет 1, тогда рендерит следующий кадр. Поток №0 - главный, он после рендера сначала ожидает, пока не обнулятся флаги всех потоков, потом опять устанавливает все единицы. Это работает, но наблюдаются сильные рывки, хотя в распоряжении 4 ничем другим не нагруженных ядра.
В каждом потоке есть DoEvents.