Ich habe 2 Threads, Ticker des ersten Spielers, zweites Rendering. Beide Threads wurden nicht synchronisiert. Ich muss Informationen im ersten Thread sammeln und es in Sekunde rendern. Im Tick Thread sammle ich Informationen mit 2 Schleifen. Jedes Mal, wenn ein Code im Tick-Thread eingegeben wird, sollte die gesamte Liste der Renderziele zurückgesetzt werden. Ich sammle diese Ziele aus 2 Schleifen, die Liste muss assoziativ sein, aber sehr schnell wegen des Renderings.Welcher Container und Verriegelungsmechanismus wird verwendet?
void TickThread()
{
g_pLock->Enter(); //EnterCriticalSection
g_List.clear(); //clear list of targets
for (obj1 : g_Objects1) //first loop of objects
{
if (obj1 && true) // here's selection
g_List[obj1->uid] = obj1; //create
}
for (obj2 : g_Objects2) //another loop of objects
{
if (obj2 && true) // here's selection
g_List[obj2->uid] = obj2; //replace if already exists or create
}
g_pLock->Leave(); //code must be fast enough, otherwise it will lock rendering
}
void RenderThread()
{
g_pLock->Enter(); //EnterCriticalSection
for (obj : g_List) //iterate over whole list
{
//render obj.first obj.second
}
g_pLock->Leave();
}
Vielleicht brauche ich einige hashmap, auch die maximale Anzahl der Objekte 64 Welche Container soll ich verwenden, sollte es sehr schnell sein, beachten Sie auch, dass ich die maximale Anzahl der Ziele kennen, können so weisen Speicher an Anfang? Auch was zum Sperren verwenden? Ich bin mir nicht sicher, dass Std :: Karte gute Idee ... Vielen Dank
Warum sind diese beiden Threads und warum sind sie nicht synchronisiert, wenn tatsächlich eine sequentielle Abhängigkeit zwischen ihnen besteht? – user463035818
Es ist nicht meins, ich hakte sie beide – Annett
Um ... was ist deine Frage? –