und wieder Threadsicherheit



  • hallo, im Moment beschäftige ich mich intensiv mit Threads. Ich möchte eine Liste an einen Thread übergeben. Diese soll nur zur Initialisierung des Threads dienen, d.h. es wird nur im Konstruktor für den Thread darauf zugegriffen und nicht in der Execute Methode. Im Konstruktor will ich die Liste auf eine private Liste des threads kopieren und während der Abarbeitung dann nur noch auf diese zugreifen.
    Jetzt die Frage, muss ich im Konstruktor des Threads die übergebene Liste auch gegen gleichzeitigen Zugriff schützen (also TThreadList benutzen)?
    Gruß Sprotti



  • Hallo,

    benutzt du TThread? Einfach im Konstruktor den Thread Suspended erstellen und nach dem Kopieren der Liste mit Resume starten.

    MfG
    tuküe



  • genau so mach ichs. aber muss man dann trotzdem im konstruktor auf threadsicherheit achten?

    __fastcall Thread::Thread(TThreadList* ppIOList)
            : TThread(true)
    {
            FreeOnTerminate = true;
            TList* lpIOList;
            lpIOList = ppIOList->LockList();        //TThreadList blocken
            gpIOList = new TList(lpIOList);         //Copykonstruktor
            ppIOList->UnlockList();                 //TThreadList unblocken
    }
    
    void __fastcall Thread::Execute()
    {
            xy = (myobject*)gpIOList->Item(0);
    }
    

    könnt man das so machen oder is das nonsens



  • Sprotti schrieb:

    genau so mach ichs. aber muss man dann trotzdem im konstruktor auf threadsicherheit achten?

    Quizfrage: Welcher Thread führt den Konstruktor aus?

    -junix



  • endlich jemand der die Sache auf den Punkt bringt 👍
    werden die Einstellungen für den neuen Thread schon im neuen Threadobjekt durchgeführt oder kümmert sich da noch der mainthread drum 😕
    ich vermute es ist der mainthread und dann bräuchte man sich um die threadsicherheit ja nicht zu sorgen, richtig?



  • Richtig. Der Thread der das Threadobjekt erstellt führt den Konstruktor aus. Erst dann ist ein weiteres Threadobjekt vorhanden und die Synchronisation wird ein Thema. Ab diesem Punkt ist die Synchronisation aber unerlässlich.

    -junix


Anmelden zum Antworten