Sto programmando un motore di gioco come un progetto per hobby, e vorrei separare la fisica e disegnare in due thread separati. I vettori di posizione delle entità sono soggetti a modifiche dal thread di fisica, mentre il thread di disegno richiede solo l'accesso in lettura. In pseudocode:
Physics thread:
loop
...
read entity position
compute new position for entity
write entity position
...
end
Drawing thread:
loop
...
read entity position
render entity
...
end
La separazione del disegno e della fisica in due thread consente il disaccoppiamento della frequenza di aggiornamento della fisica dal framerate del disegno. Questo permette cose come effetti di movimento facile lenti e frame rate variabile, ma rende anche possibile per il filo fisica per modificare un vettore posizione al tempo stesso esatto come filo disegno sta leggendo lo stesso valore.
Spero di poter andare via senza usare mutex, lock o altri controlli di concorrenza per i vettori di posizione. La validità dei dati di posizione non è critica e sono tollerabili piccoli errori derivanti dall'accesso non atomico. La mia esperienza con la programmazione concorrente è tuttavia abbastanza limitata e temo che ci siano altri problemi derivanti dall'accesso asincrono di cui non sono a conoscenza. Quali sono gli svantaggi di questo approccio? Quali alternative ci sono?
Sto programmando in C ++ 11 (usando std :: thread), su un PC x86 multi-core.