Falando no contexto de um jogo baseado no renderizador openGL:
Vamos supor que existem dois threads:
Atualiza a lógica e a física do jogo, etc. para os objetos do jogo
Faz chamadas de openGL para cada objeto de jogo com base nos dados nos objetos de jogo (esse segmento 1 continua atualizando)
A menos que você tenha duas cópias de cada objeto de jogo no estado atual do jogo, terá que pausar o Tópico 1 enquanto o Tópico 2 faz as chamadas de empate, caso contrário, os objetos do jogo serão atualizados no meio de uma chamada de empate para esse objeto, o que é indesejável!
Mas a interrupção do encadeamento 1 para fazer chamadas de desenho com segurança do encadeamento 2 mata todo o propósito de multithreading / simultaneidade
Existe uma abordagem melhor para isso além de usar centenas ou milhares ou sincronizar objetos / cercas para que a arquitetura multicore possa ser explorada para desempenho?
Sei que ainda posso usar o multithreading para carregar textura e compilar shaders para os objetos que ainda farão parte do estado atual do jogo, mas como faço para os objetos ativos / visíveis sem causar conflito com o desenho e a atualização?
E se eu usar um bloqueio de sincronização separado em cada objeto do jogo? Dessa forma, qualquer encadeamento bloquearia apenas um objeto (caso ideal) e não durante todo o ciclo de atualização / desenho! Mas qual o custo das fechaduras em cada objeto (o jogo pode ter mil objetos)?