assert in std::set (static-Variable in Multithreaded-Programmen)
-
camper schrieb:
Danach wird mit set.find(C) gesucht.
Der erste Satz impliziert, dass set.find(C) erst aufgerufen wird, nachdem ein lock auf dem Mutex existiert. Der Debugfehler sagt, dass die Vergleichsrelation keine strenge schwache Ordnung ist (a<b && b<a), was daran liegen kann dass entweder eines der Argumente zwischen zwei Aufrufen verändert wird (kann für C nicht sein, denn das ist geschützt; und ich nehme mal an, dass niemand an den set-Elementen herumschraubt) oder aber die Ordnungsrelation selbst defekt ist. Ohne entsprechenden Code ist dazu nicht mehr zu sagen http://www.c-plusplus.net/forum/304133[/quote]
Eben nicht! Genau das ist ja das Problem. Der Lock schützt C nicht, weil C eine statische Variable innerhalb der Memberfunktion der Klasse ist.
Der Lock schützt zwar vor dem Zugriff von mehreren Threads auf eine Instanz der Klasse, aber eben nicht über alle Instanzen hinweg. Und genau deshalb scheitert die Suche, weil die strict weak order nicht mehr erfüllt ist, wenn während der Suche die statische Membervariable geändert wird.
BTW: Warum wird immer so ein Aufstand wegen dem Code posten gemacht. Man kann nicht immer den Code posten, weil dieser oft Bestandteil einer größeren Umgebung ist.

-
Warum wird immer so ein Aufstand wegen dem Code posten gemacht.
Weil du prinzipiell nur eine vermittelnde Instanz zwischen dem Code und uns bist. Die brauchen wir aber nicht, du könntest ihn uns direkt geben.
Man kann nicht immer den Code posten, weil dieser oft Bestandteil einer größeren Umgebung ist.
Dann reduzierst du den Code auf das Wesentliche. Lies den von camper verlinkten Artikel.
Eben nicht! Genau das ist ja das Problem. Der Lock schützt C nicht, weil C eine statische Variable innerhalb der Memberfunktion der Klasse ist.
Dann mache doch einfach den Mutex Instanzunabhängig!
-
Arcoth schrieb:
Dann reduzierst du den Code auf das Wesentliche. Lies den von camper verlinkten Artikel.
Ich reduziere überhaupt nichts. Wer einfache deutsche Sätze nicht versteht und erst einmal 30 Zeilen bereinigten und vorgekauten Code benötigt, um triviale Sachverhalte zu verstehen, soll sich zurücklehnen und entspannen.
Niemand wird hier gezwungen zu antworten!
Arcoth schrieb:
Dann mache doch einfach den Mutex Instanzunabhängig!
Gut erkannt. Das Problem hatte ich aber schon bevor ich den Thread eröffnet hatte gelöst.
-
Dann geh wieder spielen. Immer diese Trollors.
Der Lock schützt zwar vor dem Zugriff von mehreren Threads auf eine Instanz der Klasse
Aber hey, das wiederspricht sich mit
Die statische Variable ist durch einen Mutex geschützt
Statische Objekte sind nicht instanzgebunden und koennen demnach mit instanzgebundenen Synchronisationsobjekten nicht geschuetzt werden. Eine dieser Aussagen ist also falsch.
Wer einfache deutsche Sätze nicht versteht und erst einmal 30 Zeilen bereinigten und vorgekauten Code benötigt, um triviale Sachverhalte zu verstehen
Nee, du hast einfach Bockmist geschrieben. War von vornherein kalr, deswegen die Frage nach Code.
-
Stefan124 schrieb:
Arcoth schrieb:
Dann reduzierst du den Code auf das Wesentliche. Lies den von camper verlinkten Artikel.
Ich reduziere überhaupt nichts. Wer einfache deutsche Sätze nicht versteht und erst einmal 30 Zeilen bereinigten und vorgekauten Code benötigt, um triviale Sachverhalte zu verstehen, soll sich zurücklehnen und entspannen.
Der Grund des Verlangens nach Code ist darin begründet, dass in 99% der Fälle das Verständnis des Posters nicht zu den Vorgängen passt, die tatsächlich stattfinden. Und das ist ja durchaus normal: wäre es anders, läge die Lösung des Problemes i.d.R. auf der Hand und es gäbe keinen Grund, überhaupt hier zu posten. Das bedeutet aber eben auch, das eine verbale Beschreibung in der Regel nicht ausreicht, ein Problem zu lösen, da dann das Publikum auch nur die Fehler des Posters wiederholen kann.
All das liegt eigentlich auf der Hand, und wer keinen Code zeigen will, sollte auch keine hilfreiche Antworten erwarten. Aber wie du selbst sagst, ist dein Sachverhalt ja trivial, also klannst du dich entspannen und das Posten in diesem Forum unterlassen.
-
knivil schrieb:
Dann geh wieder spielen. Immer diese Trollors.
Du bist der Troll!
Du weinst hier rum, weil du nicht in der Lage bist zwei deutsche Sätze zu verstehen.
Hoffentlich muss man dir an der Wursttheke im Supermarkt nicht auch erst C++-Code posten, damit du verstehst, wieviel die Mettwurst kostet und ob du sie dir leisten kannst. :p
-
knivil schrieb:
Dann geh wieder spielen. Immer diese Trollors.
Der Lock schützt zwar vor dem Zugriff von mehreren Threads auf eine Instanz der Klasse
Aber hey, das wiederspricht sich mit
Die statische Variable ist durch einen Mutex geschützt
Statische Objekte sind nicht instanzgebunden und koennen demnach mit instanzgebundenen Synchronisationsobjekten nicht geschuetzt werden. Eine dieser Aussagen ist also falsch.
Wer einfache deutsche Sätze nicht versteht und erst einmal 30 Zeilen bereinigten und vorgekauten Code benötigt, um triviale Sachverhalte zu verstehen
Nee, du hast einfach Bockmist geschrieben. War von vornherein kalr, deswegen die Frage nach Code.
Du musst schon den kompletten Beitrag lesen. Da steht nämlich schon im ersten Beitrag explizit.
Meine Vermutung ist, dass zwar die Methode methodInA() exklusiv geschützt ist, aber dadurch das C statisch ist, über mehrere Klassen-Instanzen geteilt wird.
Und im zweiten Beitrag steht dann sogar haargenau.
dass ein Thread die statische Variable ändert.
Wenn du das nicht kapierst, dann ist dir auch nicht mehr zu helfen.
-
Da steht, die statische Variable ist geschuetzt. D.h. der Zugriff darauf von mehreren Threads ist synchronisiert. Ist er aber nicht. Und auf wilde Vermutungen geb ich nichts.
Btw. ich weiss wie statische Variablen funktionieren.
-
knivil schrieb:
Da steht, die statische Variable ist geschuetzt.
Sie ist auch beim Zugriff von n Threads geschützt. Aber eben nicht über mehrere Instanzen hinweg!
Verstehst du das?
-
Man ist nicht geschuetzt, wenn man mit mehreren Sex hat und nur einer seine Socken anbehaelt. Verstehst du das?
-
knivil schrieb:
Man ist nicht geschuetzt, wenn man mit mehreren Sex hat und nur einer seine Socken anbehaelt. Verstehst du das?
Lol. Du bist der Forenwitzbold, stimmts?

Dein Vergleich hinkt. Die Variable kann "mit beliebig vielen Threads bumsen", solange sie nur im selben Bett bumst.