Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.09.2011, 13:01

[gelöst] Multithreading - Zugriff auf Objekt

Hallo zusammen :)

Ich habe nur eine kleine Frage:

Ist es möglich auf ein Objekt (Klasseninstanz) zuzugreifen bzw. lediglich eine Methode aufzurufen und in einem anderen Thread zur selben Zeit eine weitere Methode des selben Objekts aufzurufen ?
Die beiden Methoden greifen nicht auf die selben Membervariablen zu. Ich nehme an, dass das nicht möglich ist, aber ich frag doch lieber nochmal nach :D
Wenn es nicht funktionieren sollte: Warum funktioniert es nicht? Es wird doch eigentlich nicht auf den selben Speicher zugegriffen oder?

Lg chaia

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chaia*« (24.09.2011, 14:52)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

24.09.2011, 13:29

Wenn das nicht ginge, dann bräuchten wir keinerlei synchronisation, wo es ja genau darum geht den Zugriff auf gemeinsame Ressourcen zu regeln.

Moe

Frischling

Beiträge: 85

Wohnort: München

  • Private Nachricht senden

3

24.09.2011, 13:53

Also mir ist noch keine Sprache in die Finger gekommen, die Threading beherrscht, aber nicht gleichzeitig mehrere Methoden eines Objekts aufrufen kann. Du kannst auch gleichzeitig Membervariablen verändern, nur ist dann das Ergebnis nicht sonderlich gut vorhersehbar :) - gleichzeitig lesen ist aber prinzipiell kein Problem, was soll auch schief gehen, wenn 2 gleichzeitig den selben Wert lesen?
Mit was arbeitest Du denn?

4

24.09.2011, 14:05

Im Moment arbeite ich noch mit der WinAPI mit C++, da die SFML Threads leider keine Events unterstützen. Die Beiden Methoden verändern schon Membervariablen, aber diese haben absolut nichts miteinander zu tun. Die eine Methode berechnet die neue Position und updatet das Objekt und die andere rendert das Objekt. Würde das funktionieren?

Lg

Moe

Frischling

Beiträge: 85

Wohnort: München

  • Private Nachricht senden

5

24.09.2011, 14:36

ja, das geht ohne Probleme, wenn beide auf die Position des Objekts zugreifen, kann es nötig sein, dass Du die Zugriffe synchronisierst. Kann durchaus ohne gehen, aber wenn es zu merkwürdigen Bewegungsmustern kommt, liegt es daran (Objekt "springt" etc.)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

24.09.2011, 14:39

Das geht so.

Allerdings musst du beachten, dass auch das lesen eines Wertes nicht unbedingt atomar ist (insbesondere zusammengesetzte). Das heisst, dass du selbst im renderer das Objekt locken musst, damit du einen konsistenten Wert für die Position bekommst.

Kein Problem ist es lediglich, wenn die Objekte keinerlei Abhängigkeiten haben (ausser lesend vlt.).

7

24.09.2011, 14:51

Alles klar, danke für die Antworten :)
Die Position ist 2 mal gepeichert, einmal im Sprite (SFML) und einmal extra in meiner Klasse zum berechnen. Die Beiden Synchronisiere ich dann anschließend im Hauptthread.

Lg

Werbeanzeige