Threadsafe Zugriff auf Objekte einer Liste



  • Hallo,

    ich möchte thread-safe auf Objekte, die in einer Liste als Pointer gespeichert sind, zugreifen. Während ein Thread (T1) ein Objekt (A) gerade bearbeitet, soll ein weiterer Thread (T2) nicht geblockt werden, wenn er auf Objekt A zugreifen will. Allerdings soll die Action von Thread (T2) nach der Bearbeitung von Thread T1 ausgeführt werden.
    Wie kann man das unter Verwendung einer Mutex realisieren?


  • Mod

    Mutex7657 schrieb:

    Während ein Thread (T1) ein Objekt (A) gerade bearbeitet, soll ein weiterer Thread (T2) nicht geblockt werden, wenn er auf Objekt A zugreifen will. Allerdings soll die Action von Thread (T2) nach der Bearbeitung von Thread T1 ausgeführt werden.

    Das ist doch schon ein Widerspruch in sich. Soll nun synchronisiert werden oder nicht? Formulier erst einmal klar deine Anforderungen, sonst kann man dir nicht helfen.

    Wie kann man das unter Verwendung einer Mutex realisieren?

    Und wieso muss es ausgerechnet ein Mutex sein? Weil du irgendwo gelesen hast, dass Mutexe etwas mit der Synchronisation von Objektzugriffen zu tun haben? Weil die Hausaufgabenstellung es verlangt?

    Frag nach dem, was du letztendlich erreichen möchtest! Nicht nach irgendwelchen Zwischenschritten, von denen du annimmst, dass sie dir beim eigentlichen Problem helfen könnten.



  • Danke für die schnelle Beantwortung.

    Wo ist denn hier ein Widerspruch?
    Thread 1: Führt eine lange Berechnung mit Objekt A durch
    Thread 2: Will zur gleichen Zeit auf Objekt A zugreifen, ist aber gelockt, also verschiebe die Arbeit bis Thread 1 fertig (ohne zu blocken)

    Trage ich die Aufgabe von Thread 2 in eine Queue für Objekt A ein, um es später bearbeiten zu können?



  • Mutex7657 schrieb:

    Trage ich die Aufgabe von Thread 2 in eine Queue für Objekt A ein, um es später bearbeiten zu können?

    Wenn dazu jetzt jemand Ja oder Nein sagt, bist du dann einen Schritt weiter?

    Wenn du Aufgaben (Tasks) hast, warum existieren diese Threads?
    Hast du dir mal TBB angesehen?



  • Mutex7657 schrieb:

    Thread 2: Will zur gleichen Zeit auf Objekt A zugreifen, ist aber gelockt, also verschiebe die Arbeit bis Thread 1 fertig (ohne zu blocken)

    Du kannst auch ohne zu blockieren einfach nur gucken ob du den mutex kriegst. Wenn nicht kann der Thread erstmal irgendwas anderes machen und später nochmal probieren. Aber ich vermute das ist auch nicht gerade was du willst.



  • Die Threads sind dafür, um mehrere Objekte gleichzeitig zu bearbeiten.



  • Mutex7657 schrieb:

    Die Threads sind dafür, um mehrere Objekte gleichzeitig zu bearbeiten.

    Das ist jetzt ein bisschen dünn...



  • Mutex7657 schrieb:

    Die Threads sind dafür, um mehrere Objekte gleichzeitig zu bearbeiten.

    Threads sind dafür da, um mehrere Prozesse gleichzeitig (parallel oder quasi-parallel) zu bearbeiten. Beim gleichzeitigem Zugriff auf Variablen, Objekte und Ressourcen muss man darauf achten, ob dies "threadsicher" erfolgt. Wenn nein, sichert man das so ab, dass immer nur ein Thread Zugang hat, und erst, wenn er verschwindet, der nächste kommt. Analog Flugzeugtoilette. Ansonsten synchronisiert man parallele Aktionen mit den Standardmitteln, die C++ 11 bietet.
    https://en.wikipedia.org/wiki/C%2B%2B11#Threading_facilities


Anmelden zum Antworten