Verwaltung von Zugriffsrechten auf Daten beim Multithreading



  • Hallo,

    ich programmiere gerade an einer Serversoftware. Diese muss mit vielen Clienten kommunizieren und um das optimal zu gestalten, benutze ich dafür mehrere Threads. Jedoch muss ich dafür sorgen, dass die Daten nicht simultan manilpuliert werden, sodass keine Fehler entstehen (halt das übliche mit Multithreading).
    Dafür benutze ich std::mutex.
    Jetzt ist zum einen die Frage, welche Daten von einem mutex gelockt werden, leider kann ich dazu nichts finden, ich habe die Vermutung, dass immer die Variablen, die im selben Block deklariert wurden von einem mutex gelockt werden, also wenn der mutex ein Klassenmemeber ist, dann werden alle anderen Member der Klasse blockiert usw. Da ich mira llerdings nicht sicher bin, wäre ich über eine präzise Antwort, welche Variablen betroffen sind, dankbar.

    Meine zweite Frage ist, ob es sich lohnt, wenn ich viele Clienten habe, die ich alle bearbeiten muss, einen mutex für jeden Clienten zu erstellen, sodass ich auf andere Clienten ausweichen kann, falls einer schon benutzt wird. Dafür muss ich aber genau wissen, welche Teile ein mutex blockt, wie oben beschrieben.

    Oder kennt ihr andere Vorgehensweisen, die in einer solchen Situation angebracht sind?
    Es ist wichtig, dass es von der Laufzeit und dem Speicherverbrauch nicht allzu resourcenlastig ist, da der Server ja dann auch noch andere Aufgaben erledigen muss als nur die Verwaltung der Clienten.

    Danke für die Hilfe!



  • Schamote schrieb:

    Frage, welche Daten von einem mutex gelockt werden

    Der Mutex selber wird gelockt, sonst nichts.



  • Ein Mutex lockt sich selbst, sonst nichts. Welche Variablen durch einen Mutex geschütz werden, bestimmst du selbst, indem du vorher immer den von dir gewählten Mutex benutzt.



  • Es gibt keine Zuordnung von Mutexen und den geschützten Variablen in C++, das legt die Programmlogik fest. Auf Code-Ebene werden nicht Variablen gelockt, sondern Mutexe.

    Auf Programmlogikebene kann man sagen, dass ein Mutex alle Variablen lockt, die während aller Zugriffe in allen anderen potentiell gleichzeitig laufenden Threads auch genau diesen Mutex gelockt haben.



  • Achsoooooooooooooo, jetzt kapiere ich das Prinzip, ich bin auch ein bisschen doof 😃
    Also definiere ich einfach selber, welcher Mutex zu welchen Variablen gehören, und dass der gelockt werden muss, wenn ich die benutzen will.

    Das erklärt auch, warum nirgends etwas dazu steht.


Log in to reply