[SOLVED] Shared Data in classes: static oder shared_ptr<>?



  • Hallo,

    ich denke momentan über die naive Implementierung eines meiner Programme nach und hatte folgende Idee: Momentan laufen mehrere Threads, wobei ein thread eine Funktion einer Klasse ist. Alle threads teilen sich dabei bestimmte Variablen:

    // Pseudocode
    class:
        run()  // wird als thread gestartet
    
        static sharedData1;
        static sharedData2;
        static mutex
    

    Wäre sowas denn besser:

    // Pseudocode
    struct shared:
        sharedData1
        sharedData2
    
    class:
        shared_ptr<shared> data;
        // bzw. Reference, oder raw Pointer
        mutex
    

    Ich versuche mich zu verbessern und möchte nun wissen, ob ich mit dem Gedanken richtig liege. Oder ob es eine weitere Möglichkeit gibt.

    Ich hoffe mein Problem ist deutlich dargestellt.

    LG



  • Es stellt sich die Frage, warum es überhaupt eine Klasse ist. "Weil es objektorientiert ist" ist keine gültige Antwort.

    Ansonsten: was findest du an der zweiten Lösung besser?



  • Warum class und keine Funktion? Weil ich bestimmte Teile habe, die für jede Instanz doch unterschiedlich sind. Das wäre der NetworkAdapter (pcap_if*), auf dem packets gecaptured werden.

    Warum muss ich davon mehrere haben, wenn doch alles über denselben laufen sollte? Weil ich nicht weiß, wie ich programmatisch herausfinden kann, welcher der richige ist 😕 Außer vielleicht 10 Sekunden lang alle abhören und nur den verwenden, auf dem Daten übertragen werden.

    Vermutlich habe ich mit meinem Projekt angefangen ohne ausreichend technisches Wissen.

    Was finde ich an der zweiten Lösung besser? Nix, braucht auch mehr RAM soweit ich weiß. Wusste nur nicht, ob ich vielleicht den Sinn von static missbrauche.

    Vielen Dank für die Antwort, hat schon wieder eine Denklawine bei mir ausgelöst.

    LG



  • Die zweite Lösung finde ich auf jeden Fall besser.
    Dann könnte man die Threadfunktion evtl. auch als freie Funktion und nicht als Klasse implementieren, je nachdem, was du mit deinem Framework alles für Möglichkeiten hast.



  • Aber in Funktionen kann man doch auch statische Variablen haben, oder?



  • Nein, statische Variablen sind grundsätzlich keine gute Idee. Stell dir vor, du willst mal zwei "Sets" von den Threads laufen lassen, die an unterschiedlichen Daten arbeiten. Es lohnt sich nicht, großartig über sowas nachzudenken. Wenn du etwas nicht statisch/global machen kannst, dann machs auch nicht statisch oder global.



  • OK, dann versuche ich mal an den beiden Verbesserungen, Auslagerung von Klasse in Funktionen und Ersetzen der (unnötig) statischen Sachen (durch eine geeignete Datenstruktur als Funktionsargument).

    LG


Anmelden zum Antworten