Picasso

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Picasso
Hallo zusammen,
ich hätte da mal eine Frage zu Picasso.
Meiner Meinung nach ist die Synchronisation die Aufgabe der Threads, das kann ja aber so einfach nicht funktionieren.
Kann mir jemand auf die Sprünge helfen?


Und warum sollte das nicht funktionieren?


Soll die Synchronisation dann in den Methoden passieren und sollen die Threads dann da gestartet werden oder wie kann ich das verstehen?
Wenn nein gibt es dann 3 verschiedene Threads?


du hast soviele threads, wie in der main angegeben. es muss auf jeden fall in den threads synchronisiert werden. jetzt musst du halt überlegen, wie du den kritischen abschnitt minimieren kannst. es ist z.b. nicht sinnvol die komplette run methode snychronized zu machen.


problem gelöst, danke :wink:


Nein, du hast so viele Threads wie angegeben werden. Das können auch 100 sein. Dein Programm muss mit einer beliebigen Anzahl von Threads klar kommen.

Jeder Thread bemalt dann nur ein Teil des Bildes.


Ich denke die ursprüngliche Frage bezog sich auf die Anzahl der von Thread abgeleiteten Klassen. Antwort: Soviele ihr braucht :wink:

Picasso, die Zweite
Hallo zusammen!

Ich habe die letzte Picasso-Teilaufgabe (3.5c) nach langem Überlegen und Kopfzerbrechen geschafft. Da steckt mehr Mathe dahinter als ich scheinbar verkraften kann. Jedenfalls kam nach diversen Tests der Schock: Wenn ich in der Main()-Methode die Zahl der Threads ändere (zum Beispiel von 10 auf 8 reduziere), bleiben einige der allerletzten Kästchen nicht gefärbt. (Also einige wenige - weniger als ich Threads habe - ganz unten rechts, da meine Implementierung von links oben nach rechts unten arbeitet.)

Hat jemand vielleicht bei seiner Implementierung ein ähnliches Problem festgestellt und könnte mir einen Tipp geben, woran das denn liegt?


ich fülle das bild einfach spaltenweise, also pro spalte ein thread. dazu teile ich die breite der canvas durch die anzahl der threads und was übrig bleibt wird einfach dem letzten thread noch drauf gepackt. simpel, aber für die punkte reicht das denke ich :wink:


dann sind aber die arbeitspakete nicht unbedingt in etwa gleich groß


ja kommt drauf an wie genau man das ganze nimmt. ein intervall wird dann im schlechtesten fall natürlich fast auf die doppelte größe anwachsen…


Klingt so, als würdest du deinen Modulo-Rest nicht bearbeiten. Ich kenne die Aufgabe jetzt nicht, aber wenns darum geht eine Anzahl Arbeitspakete mit einer unbestimmten Anzahl Threads abzuarbeiten, dann würde ich die Pakete in eine Liste stecken und dann die Threads synchronisiert jeweils immer ein Paket entnehmen lassen. Dann hast du auch das Problem mit irgendwelchen ganzzahligen Reste nicht :slight_smile:


Synchronisiert soll es bei der dritten nicht sein. Der Trick ist das Aufteilen, und wenn der letzte Thread etwas (eine Spalte oder so) mehr macht, ist das auch kein Problem. Solange es im allgemeinen gleich verteilt ist.


Danke an alle, die Hilfestellungen angeboten haben! Habe die Aufgabe endlich gelöst. Es lag am Rest der Division, für den ich einen Sonderfall schaffen musste. :slight_smile: