Threadsafe Pointer-zugriff



  • Ja, shared_ptr eignen sich gut für sowas.

    Sie lösen aber nicht das zweite Problem dass du hast, nämlich dass die Objekte selbst thread-safe sein müssen.
    D.h. du musst deine Objekte thread-safe machen, oder die Zugriffe irgendwie von Aussen synchronisieren. Was sich aber schwierig gestalten wird, wenn die Threads einfach so jeder für sich hin machen ohne zu wissen was die anderen tun.



  • also grob gesagt shared_ptr benutzen und objekte threadsafe machen!? wird gemacht 🙂



  • ich habe so das Gefühl dass dieses Design implodieren wird.



  • gamer8o4 schrieb:

    for(auto it = m_objects.begin(); it != m_objects.end(); ++it)
    

    Ach, so sucht man heute in einer map. 🤡 🤡 🤡



  • volkard schrieb:

    gamer8o4 schrieb:

    for(auto it = m_objects.begin(); it != m_objects.end(); ++it)
    

    Ach, so sucht man heute in einer map. 🤡 🤡 🤡

    Jetzt lies doch mal genau was er macht, steht doch im Kommentar und der lügt nie.

    gamer8o4 schrieb:

    // search for the right element and erase it if it exists
        for(auto it = m_objects.begin(); it != m_objects.end(); ++it){ 
            if(it->first == p_id) return it->second;
        }
    

    Aber was soll man auch machen, wenn die map keine search Methode hat. :p



  • Aber immer hin macht er ja alles "Thread-safe", damit holt er die Performance mit Multithreading sicher wieder raus.



  • Aber immer hin macht er ja alles "Thread-safe"

    ja, die klasse gehört zu der grundlage auf der später ein gleines eigenes direct3d 11 gui system aufsetzen soll und das soll alles schön threadsafe sein (zumindest wird allen klassen durch policies die möglichkeit gegeben threadsafe zu sein) 😉

    Ach, so sucht man heute in einer map.

    nein natürlich nicht 😃 ich hab auch schon alles mit map::find umgeschrieben...

    ich habe so das Gefühl dass dieses Design implodieren wird.

    oh ja, da habe ich schiss vor 😃
    Ich bin gerade nen bisschen am überlegen und ausprobieren, wie ich es so hinbekommen kann, dass genau das nicht passiert.
    ich muss irgentwie richtlinien schaffen, dass ein thread die hauptaufgaben wie löschen und ein paar weitere sachen übernimmt, die ich jetzt hier nicht erkläre und die anderen threads nur leserechte haben.
    Das wird noch lustig, ich muss einiges am design noch überdenken ich weiß 🤡



  • Was genau versprichst du dir davon, dass mehrere Threads hier gleichzeitig versuchen, Items zu löschen, dabei aber natürlich serialisiert werden müssen!?

    Alles threadsafe zu machen, indem man überall Locks drum herumbaut, ist nett. Aber der Sinn von Threads ist nunmal, dass Dinge parallel ausgeführt werden können. Threads die sich ständig gegenseitig blockieren, bringen nichts außer Komplexität und sinnlosen Overhead...



  • okay, es klingt glaube ich erstmal ziemlich sinnlos, wenn man nicht weiß was ich mache, also....

    ich habe die oben beschriebene klasse namens CLanguageManager die objekte der klasse CLanguage verwaltet. mit verwalten ist in diesem fall gemeint es wird immer die aktuelle sprache selektiert und alle threads können so auf das aktuell aktive objekt von CLanguage zugreifen. Dardurch bekomme ich multilanguage-support und kann die sprache mit einem simplen pointerwechsel für das gesammte programm ändern.
    Außerdem habe ich durch den lösch-und lademechanismus die möglichkeit sprachen also samlungen von strings während der laufzeit des programms aus einem eigenen dateiformat zu lesen und nicht mehr benötigte objekte von CLanguage aus dem zu löschen (über die erase-funktion).
    Die get-funktion spielt in diesem durcheinander eine eher kleine rolle, da ihr die aufgabe zukommen würde strings von einer bestimmten sprache auszulesen;
    viel wichtiger ist da die "getSelected"-funktion, welche in etwa nach dem gleichen prinzip funktioniert, aber die aktuelle sich möglicherweise ändernde sprache zurückgibt.

    Puuhhh... hoffe man kann das verstehen. solange die klasse nicht fertig ist ist es schwer zu erklären was in meinem kopf vorgeht 😃

    edit: das mit den shared_ptr greift also dann, wenn ein thread auf eine sprache zugreift, welche angeblich nicht mehr gebracht wird und vom hauptthread schon gelöscht wurde..



  • Für eine einfache Sprachumschaltung zur Laufzeit ist das aber mit "Atombomben auf Spatzen werfen".

    Das Design würde ich nochmal überdenken 😃



  • @MichelRT
    Nicht wirklich.
    Es ist einfach, sicher und funktioniert.

    Wo sind hier die Atombomben?
    Und wo die Spatzen? Es gibt durchaus einige Fälle wo man sich mit sowas in den Fuss schiessen kann, wenn man es zu einfach macht.



  • ja, die programme die ich meißtens schreibe sind von der gui relativ überschaubar, aber eben mehrsprachig, also dachte ich mir... warum nicht 😉

    außerdem wenn man nur eine sprache läd ist das ganze doch eher ein tepichknaller als eine atombombe. einfaches strings für buttonbeschriftungen, usw. aus einer datei lesen


Anmelden zum Antworten