Objekt instanzierung gleichzeitig.
-
Nehmen wir an ich hab eine Klasse Foo, und habe 2 Threads.
class Foo{ Foo(..){ //Hier passiert was , was länger dauert } };nun erzeuge ich in den 2 laufenden Thread jeweis "gleichzeitig" eine Instanz der Klasse (ich weis gleichzeitig gibts praktisch nich aber egal jetzt). un der Konstruktor macht etwas was länger dauert, was passiert da intern?
Ich denke die frage ist sicher sau dumm.. aber mir grad so der gedanke gekommen wie ne klass im compilieren code aussieht, und wie aus ihr eine objekt ensteht.
-
Was willst du denn wissen? Wenn der Konstruktionsvorgang zu lang dauert kann es passieren, dass der Vorgang unterbrochen wird und der andere Thread zu laufen beginnt.
ich weis gleichzeitig gibts praktisch nich aber egal jetzt
Doch, gibts praktisch schon.
-
genau das will ich wissen, wenn Thread a noch im Konstruktor ist, und Thread B auch das Gleiche objekt erzeugen will.
Ich nehme an die Objekte werden erst mal im speicher angelegt, dann wird jeweils das objekt über den konstruktor initalisiert oder? das kann ja parralell passieren!?!
-
Ja, das kann parallel passieren. Und im Normalfall ist das auch kein Problem. Probleme kann es dann geben wenn beide Threads auf die selben Resourcen zugreifen.
-
ja gut, in dem fall sind es ja nicht die gleichen ressourcen.
D.h. die frage war gar nich so blöd^^ :p
-
und Thread B auch das Gleiche objekt erzeugen will
Wie soll das denn gehen? Willst du placement new verwenden? Oder meinst du ,ot "das gleiche Objekt" in Wirklichkeit "ein Objekt der selben Klasse"? Letzteres ist unproblematisch solange der ctor grundsätzlich threadsafe und reentrant programmiert ist.
Was das angeht (grundsätzlich threadsafe und reentrant): solange du keine globalen oder statischen Variablen verwendest ist das meist der Fall ohne dass du noch speziell was dazu tust.
-
BlödeFrage schrieb:
ja gut, in dem fall sind es ja nicht die gleichen ressourcen.
D.h. die frage war gar nich so blöd^^ :p
doch eigentlich schon, weil die Attribute ja für jede Instanz gelten und nicht global sind und bei Concurrency du deine Daten schützen musst und nicht den Code (den liest du für gewöhnlich nur und änderst ihn nicht).
-
Hmm... wenn er aber bspw. eine singelton Klasse in 2 thread verwenden würde, dann könnte es probleme geben.
-
BorisDieKlinge schrieb:
Hmm... wenn er aber bspw. eine singelton Klasse in 2 thread verwenden würde, dann könnte es probleme geben.
Für diese Fragestellung müsste die Feststellung lauten: Wenn zwei Threads eine Singletonklasse gleichzeitig zum ersten Mal verwenden würden (wegen der Instanzierung beim Erstaufruf), könnte es Probleme geben.