Ich habe ein einfaches Array von Zeichenfolge, und ich versuche, auf sie zuzugreifen und durch verschiedene Threads zu schreiben. Infact Ich habe die Größe char[10]
jeder, da ich immer die Länge jeder Zeichenfolge < 500 haben werde. Ich weiß, wenn ich darauf zugreifen würde, ohne Änderung zwischen, von verschiedenen Threads, wird es kein Problem damit sein.Zugriff auf und Schreiben in Array aus verschiedenen Threads
Das Problem tritt auf, wenn ich zu diesen Strings aus verschiedenen Threads schreibe und wenn ich eine Zeichenfolge bei arr[2]
aus verschiedenen Threads ändern, die Ergebnisse sind irgendwie unvorhersehbar, da Threads möglicherweise voreinander laufen und die Ausgabe ist unvorhersehbar und oft mischen Sie diese 2 Saiten. Dies liegt daran, dass die Strings aus mehreren Zeichen bestehen und verschiedene Threads gleichzeitig auf verschiedene Zeichen desselben Strings zugreifen und so eine Mischung von Strings erzeugen.
Ich habe in mutexes und atomic Variablen untersucht. Mutexe müssen die Variable sperren und dann die Zeichenfolge schreiben und dann entsperren. Wäre dies ein guter Ansatz zur Lösung des Problems? Ich versuchte den atomaren Ansatz zu verstehen, aber es ging mir direkt durch den Kopf:/
Eine andere Frage wäre, wenn das Array aus echten atomaren Operationen wie ein Array von Bool zusammengesetzt wäre, wo ich nur wahr oder falsch setzen müsste Zu welchen Indizes würde dieses Problem auch dort auftreten? Da es keine Mehrfachzeichen gibt, sollte das Problem nicht da sein, oder?
Müssen alle Threads in denselben globalen String schreiben? Können Sie die gesamte Verarbeitung durchführen und dann am Ende eine Zeichenfolge zurückgeben und all diese aus allen Threads kombinieren? – NathanOliver
@NathanOliver Das String-Array ist global, da es für alle Threads zugänglich sein muss. Aber ja, ich kann eine direkte Zeichenfolge nach der Verarbeitung zurückgeben. Würde das garantieren, dass Strings nicht schlecht geformt sind? –
"Nicht mehrere Zeichen -> Kein Problem" ist eine gefährliche falsche Schlussfolgerung. Es ist viel komplizierter als das, es gibt auch Caching/Sichtbarkeitsprobleme. – alain