Parlando nel contesto di un gioco basato sul renderer openGL:
Supponiamo che ci siano due thread:
Aggiorna la logica e la fisica del gioco, ecc. Per gli oggetti di gioco
Esegue chiamate openGL per ogni oggetto di gioco in base ai dati negli oggetti di gioco (quel thread 1 continua ad aggiornarsi)
A meno che tu non abbia due copie di ciascun oggetto di gioco nello stato corrente del gioco, dovrai mettere in pausa il thread 1 mentre il thread 2 effettua le chiamate di sorteggio, altrimenti gli oggetti di gioco verranno aggiornati nel mezzo di una chiamata di sorteggio per quell'oggetto, che è indesiderabile!
Ma interrompere il thread 1 per effettuare chiamate di disegno in modo sicuro dal thread 2 uccide l'intero scopo del multithreading / concorrenza
Esiste un approccio migliore per questo oltre all'utilizzo di centinaia o migliaia o sincronizzazione di oggetti / recinzioni in modo che l'architettura multicore possa essere sfruttata per le prestazioni?
So di poter ancora utilizzare il multithreading per caricare texture e compilare shader per gli oggetti che devono ancora far parte dello stato di gioco corrente, ma come posso farlo per gli oggetti attivi / visibili senza causare conflitti con il disegno e l'aggiornamento?
Cosa succede se utilizzo un blocco sincronizzazione separato in ciascuno degli oggetti di gioco? In questo modo qualsiasi thread si bloccherebbe solo su un oggetto (caso ideale) anziché per l'intero ciclo di aggiornamento / disegno! Ma quanto costa prendere i lucchetti su ogni oggetto (il gioco può avere un migliaio di oggetti)?