Parler dans le cadre d'un jeu basé sur le rendu openGL:
Supposons qu'il existe deux fils:
Met à jour la logique et la physique du jeu, etc. pour les objets du jeu
Effectue des appels de dessin openGL pour chaque objet de jeu en fonction des données dans les objets de jeu (ce thread 1 continue de se mettre à jour)
À moins que vous ayez deux copies de chaque objet de jeu dans l'état actuel du jeu, vous devrez mettre en pause Thread 1 pendant que Thread 2 effectue les appels de tirage sinon les objets de jeu seront mis à jour au milieu d'un appel de tirage pour cet objet, ce qui est indésirable!
Mais arrêter le thread 1 pour effectuer des appels en toute sécurité depuis le thread 2 tue tout le but du multithreading / simultané
Existe-t-il une meilleure approche pour cela autre que l'utilisation de centaines ou de milliers ou la synchronisation d'objets / clôtures afin que l'architecture multicœur puisse être exploitée pour les performances?
Je sais que je peux toujours utiliser le multithreading pour charger des textures et compiler des shaders pour les objets qui ne font pas encore partie de l'état actuel du jeu, mais comment le faire pour les objets actifs / visibles sans provoquer de conflit avec le dessin et la mise à jour?
Que se passe-t-il si j'utilise un verrouillage de synchronisation distinct dans chacun des objets du jeu? De cette façon, n'importe quel thread ne bloquerait qu'un seul objet (cas idéal) plutôt que pour tout le cycle de mise à jour / dessin! Mais combien coûte la prise de verrous sur chaque objet (le jeu peut avoir mille objets)?