Hablar en el contexto de un juego basado en el renderizador de OpenGL:
Supongamos que hay dos hilos:
Actualiza la lógica y física del juego, etc. para los objetos del juego.
Realiza llamadas de sorteo de OpenGL para cada objeto del juego según los datos de los objetos del juego (ese hilo 1 se actualiza constantemente)
A menos que tenga dos copias de cada objeto del juego en el estado actual del juego, tendrá que pausar el Hilo 1 mientras que el Hilo 2 realiza las llamadas de sorteo; de lo contrario, los objetos del juego se actualizarán en medio de una llamada de sorteo para ese objeto, que es indeseable!
Pero detener el subproceso 1 para realizar llamadas de extracción con seguridad desde el subproceso 2 mata todo el propósito de subprocesamiento múltiple / concurrencia
¿Existe un mejor enfoque para esto que no sea usar cientos o miles o sincronizar objetos / cercas para que la arquitectura multinúcleo pueda ser explotada para el rendimiento?
Sé que todavía puedo usar subprocesos múltiples para cargar texturas y compilar sombreadores para los objetos que aún no forman parte del estado actual del juego, pero ¿cómo lo hago para los objetos activos / visibles sin causar conflictos con el dibujo y la actualización?
¿Qué sucede si uso un bloqueo de sincronización separado en cada objeto del juego? ¡De esta forma, cualquier subproceso solo se bloquearía en un objeto (caso ideal) en lugar de en todo el ciclo de actualización / dibujo! Pero, ¿qué tan costoso es bloquear las cerraduras de cada objeto (el juego puede tener mil objetos)?