Einfaches Beispiel für Prozessynchronisation mit Arrays
-
tanja.hopfer schrieb:
Hallo liebe Gemeinde
Wie kommst du darauf, dass wir lieb sind
?Ich glaub, dir fehlen noch mehr Grundlagen, als nur der Mutex? Zumindest ist die Frage recht schwammig formuliert. Du redest von "Methoden", die ein Array manipulieren. Weißt du denn überhaupt schon, wie man mehrere Threads erstellt? Weil ohne brauchst du erstmal auch kein Mutex

-
Mechanics
Wie erstellt man denn mehrere Threads? Was meinst du genau?
-
Wie erstellt man denn mehrere Threads? Was meinst du genau?
Na wie erstellst du denn mehrere Objekte?

Nein, aber mal im Ernst, das wird hier nix. Besorg dir ein Grundlagenbuch zu diesem Thema (oder nach dem zweiten Beispiel wohl eher ein Grundlagenbuch zu C++), und frag erst, wenn du was konkretes hast.
-
Naja, wenn du etwas "gleichzeitig" machen willst, brauchst du Threads. Wenn du C++11 benutzt, kannst du std::thread nehmen. Wird in dem von Sone vorgeschlagenen Buch wahrscheinlich alles drin stehen, ich kenns nicht. Es gibt aber auch genug Tutorials im Internet, um schnell reinzukommen brauchst du da nicht unbedingt ein Buch. z.B. erster Treffer bei Google:
-
Ja, und guck mal welches Buch die da rechts werben

-
Genau das was du vorgeschlagen hast Sone
Danke nochmal
Wie sieht denn die Idee aus um das auf das Array-Beispiel anzuwenden?
-
...
-
*klopfklopf* Hallo, darf ich kurz stören?
Findet ihr das Buch empfehlenswert? Wollte auch mal eins im Schrank stehen haben. Nur damit ich meinen Gästen imponieren kann, selbstverständlich.
-
Ohne Threads ist das ganz einfach:
class Method { public: virtual void ArrayOperation(int a[], int length) = 0; }; class PrintMethod : public Method { public: virtual void ArrayOperation(int a[], int length) { for(int i = 0; i < length; ++i) cout << a[i] << ", "; cout << endl; } }; class CalcMethod : public Method { public: virtual void ArrayOperation(int a[], int length) { for(int i = 0; i < length; ++i) a[i] += 3; } }; int main() { const int SIZE = 10; int arr[SIZE]; bool condition = rand() % 2 == 0; Method * m = condition ? new PrintMethod : new CalcMethod; m->ArrayOperation(arr, SIZE); delete m; return 0; }(Um trotzdem mal ein Negativbeispiel zu nennen, da gibts genug Dinge anzumäkeln in dem Code)
Aber ist es echt das was du willst?
Oder geht es dir um echte Nebenläufigkeit wie alle hier vorrausgesetzt haben?
-
Ich habs ne zeitlang so gemacht (ist vielleicht unsauberer Code, wenigstens ein Vorschlag). Wollte z.B. die Anzahl aktiver Threads bestimmen und habe die Long's dann mit InterlockedIncrement() und InterlockedDecrement() inkrementiert und dekrementiert.