Mówienie w kontekście gry opartej na renderze OpenGL:
Załóżmy, że istnieją dwa wątki:
Aktualizuje logikę gry i fizykę itp. Dla obiektów w grze
Wykonuje wywołania openGL dla każdego obiektu gry na podstawie danych w obiektach gry (ten wątek 1 aktualizuje się)
Jeśli nie masz dwóch kopii każdego obiektu gry w bieżącym stanie gry, musisz wstrzymać Wątek 1, podczas gdy Wątek 2 wykonuje wywołania losowania, w przeciwnym razie obiekty gry zostaną zaktualizowane w środku wywołania losowania dla tego obiektu, co jest niepożądane!
Ale zatrzymanie wątku 1 w celu bezpiecznego wykonywania połączeń losujących z wątku 2 zabija cały cel wielowątkowości / współbieżności
Czy jest na to lepsze podejście niż używanie setek lub tysięcy lub synchronizowanie obiektów / ogrodzeń, aby architektura wielordzeniowa mogła być wykorzystana do wydajności?
Wiem, że wciąż mogę używać wielowątkowości do ładowania tekstur i kompilowania programów cieniujących dla obiektów, które jeszcze nie są częścią bieżącego stanu gry, ale jak to zrobić dla obiektów aktywnych / widocznych bez powodowania konfliktu podczas rysowania i aktualizacji?
Co się stanie, jeśli użyję osobnej blokady synchronizacji w każdym obiekcie gry? W ten sposób każdy wątek będzie blokował tylko jeden obiekt (idealny przypadek), a nie cały cykl aktualizacji / rysowania! Ale ile kosztuje blokowanie każdego obiektu (gra może mieć tysiąc obiektów)?