Damit das Ganze prinzipiell funktionieren kann, dürfen Deine RenderEntities nur Daten enthalten, die nicht geändert werden können.
Generell würde man dann eher am Anfang eines Frames diese RenderEntities generieren (oder bestehende aktualisieren) und dann
eine Liste mit den Instanzen an den MultithreadedRenderer geben. Der könnte dann die große Liste in einzelne Blöcke aufteilen
(einen für statische Gegenstände, einen für Objekte deren Material Alpha Blendung verwendet usw.). Du kannst nicht parallel
in einem anderen Thread (sagen wir mal einem Update Thread) diese RenderEntities ändern. Denn dann hättest Du einen undefinierten
Zustand. Denk mal, Dein RenderEntity hätte 3 Eigenschaften und während des Updates wird das erste geändert und dann rendert
ein andere Thread das Ding und danach werden erst die anderen beiden geändert. Das wäre ein inkonsistenter Zustand.
Wenn Du mehrere Threads zum Render nehmen willst, dann müssen diese jeweilig in ein separates RenderTarget rendern. Dann kannst
Du hinterher die zusammenfassen.
Das Ganze ist extremst aufwendig. Sehr schwer zu handhaben und erfordert meistens eine vollständiges Redesign seiner Engine.
Das Ergebnis ist dabei auch eher fragwürdig. Nimmst Du zum Beispiel einen ThreadPool aus Windows Vista, dann fängst Du dir
plötzlich ganz andere Probleme ein. Also solltest Du (wenn es Dir wirklich, wirklich ernst ist damit) auch das Threadmanagement und
Handling der Threads selber bauen.