Когда вы только начинаете, разделять темы на основе обязанностей гораздо проще. Более «правильный» подход к этому, который приводит к большей масштабируемости, состоит в использовании пулов потоков. Существуют готовые решения для пула потоков, в том числе для SDL.
Если вы используете OpenGL или DirectX для рендеринга, я сомневаюсь, что вызовы этих API приведут к большим накладным расходам, так что вы можете по крайней мере выполнить (обязательно) последовательные части игрового цикла в основном потоке: get ввод, обновление модели мира (в том числе с использованием результатов ai calcs), рендеринг. Тогда вы можете иметь AI, сетевые потоки, работающие параллельно. Таким образом, вам не нужно беспокоиться об отдельном потоке рендеринга. Из этого есть одно исключение: если вы выполняете тяжелый в вычислительном отношении (а я имею в виду, как в рэйкастинге / рэйтрейсинге) рендеринг в программном обеспечении, то вам лучше было бы как-то выполнить «логику» рендеринга в параллельном потоке, записывая в кадровый буфер а затем в главном потоке выполняем последовательность, указанную выше, и просто копируем подготовленный фреймбуфер с помощью например. GDI.
Что касается рендеринга, то да, рендеринг AFAIK только из одного потока (основного потока) является (или был), как правило, хорошей идеей для обеспечения, например,. с OpenGL у вас нет проблем. Опять же AFAIK это больше не проблема на основных платформах. Кроме того, я не знаю, есть ли у GDI или DirectX одинаковые проблемы.