Standard synchronisierungs problem



  • Hallo zusammen

    ich habe folgende Problemstellung:

    Es gibt zwei Speicherbereiche (Array). Der eine wird beschrieben, der andere wird ausgelesen, dann werden beide getauscht. Lesen und Schreiben sind jeweils eigene Threads. Das Wechseln der Speicher muss ich synchronisieren, aber wie??

    Write() -> SpeicherA    SpeicherB -> Read()
                      <-Swap()->
    

    Mit Mutexen hab ich schon mal gearbeitet, aber wann wird was gelockt?



  • Musst du mit dem Swap nicht eh warten, bis beide Threads mit ihrer Arbeit fertig sind?



  • Ja, genau das möchte ich machen.

    Reicht da ein Mutex für die Swap Funktion?
    Kann ich einen Mutex einfach zweimal locken und der muss dann auch zweimal freigegeben werden?

    Wie sieht das aus wenn ich noch einen dritten prozess hab, der auf beide Tabellen lesend zugreift?



  • Ich möchte ja gerade, dass lesen und schreiben sich nicht blockieren.


  • Mod

    Warum ein Mutex, wenn es eine CriticalSection tut.

    In diesem Fall langt eine CriticalSection, die den Zugriff auf den lesenden Array sperrt. Der zweite Array wird ja sowieso nur von einem Owner beschrieben (so wie ich das verstehe). Soll der Array getauscht werden, dann wird die CriticalSection aquiriert (wie auch beim lesen) und der swap ausgeführt.


Anmelden zum Antworten