vector Threadsave read/write



  • Hm, dazu gleich noch eine Frage...

    Selbst wenn man die Queue mittels zB einer CriticalSection Thread-Safe macht, könnte das zu Problemem führen. So weit ich weiß, darf immer nur der Prozess, der Objekte erzeugt hat, diese auch wieder löschen. Wenn aber nun der Producer die Daten in die Queue schreibt und der Consumter sie ausliest, werden die Objekte vom Producer erzeugt, aber vom Consumer gelöscht. Und genau das könnte ein Problem mit der Speicherverwaltung geben, oder nicht?



  • Joe_M. schrieb:

    Hm, dazu gleich noch eine Frage...

    Selbst wenn man die Queue mittels zB einer CriticalSection Thread-Safe macht, könnte das zu Problemem führen. So weit ich weiß, darf immer nur der Prozess, der Objekte erzeugt hat, diese auch wieder löschen. Wenn aber nun der Producer die Daten in die Queue schreibt und der Consumter sie ausliest, werden die Objekte vom Producer erzeugt, aber vom Consumer gelöscht. Und genau das könnte ein Problem mit der Speicherverwaltung geben, oder nicht?

    Hmm, wenn dem so wäre, dann würden aber alle Pipes die so benutzt werden nicht gehen.
    Hast Du mal eine Referenz, wo das steht? Würde mich mal interessieren.



  • Tachyon schrieb:

    Hast Du mal eine Referenz, wo das steht? Würde mich mal interessieren.

    Ich hatte gehofft, ihr könntet mir eine entsprechende Referenz geben. 😉



  • Joe_M. schrieb:

    Tachyon schrieb:

    Hast Du mal eine Referenz, wo das steht? Würde mich mal interessieren.

    Ich hatte gehofft, ihr könntet mir eine entsprechende Referenz geben. 😉

    camper?


  • Mod

    Joe_M. schrieb:

    Hm, dazu gleich noch eine Frage...

    Selbst wenn man die Queue mittels zB einer CriticalSection Thread-Safe macht, könnte das zu Problemem führen. So weit ich weiß, darf immer nur der Prozess, der Objekte erzeugt hat, diese auch wieder löschen. Wenn aber nun der Producer die Daten in die Queue schreibt und der Consumter sie ausliest, werden die Objekte vom Producer erzeugt, aber vom Consumer gelöscht. Und genau das könnte ein Problem mit der Speicherverwaltung geben, oder nicht?

    Im Prinzip ist das möglich. Wenn ich es richtig verstanden habe, soll es hier allerdings um verschiedene Threads in einem Prozess gehen. Ob ein Speicherblock, der in einem Thread angefordert wurde, in einem anderen Thread freigegeben werden darf oder nicht, hängt letztlich von der Implementierung der Speicherverwaltung ab. Es wäre denkbar, dass die Speicherverwaltung jedem Thread lokale Blöcke zuteilt, innerhalb deren keine Synchronisation erforderlich ist. In diesem Fall müsste man wohl die Speicherblöcke, die beim Consumer ankommen wieder zum Producer zurückbefördern (z.B. über eine Queue, bei der beide Rollen vertauscht sind). Andererseits ist das - üblicherweise - kein Problem mit den Standardfunktionen (new/delete, malloc/free etc.).


Anmelden zum Antworten