Forum: Mikrocontroller und Digitale Elektronik Rückgabewert einer Critical Section


von Johannes H. (Gast)


Lesenswert?

Hallo Leute,

ich zerbreche mir gerade den Kopf bezüglich einer Crtitcal Section. Also 
ich habe mir so überlegt, dass meine Shared Ressource z.B eine Struktur 
über die Funktion acccess_critical_section() betreten und je nachdem 
gelesen oder beschrieben wird. Innerhalb der Funktion verwende ich 
Semaphoren, damit meine Struktur geschützt ist. Soweit so gut.

Angenommen ich will aus der Struktur lesen. Also rufe ich die Funktion 
mit diesen Paramatern so auf:
1
struc test {..};
2
3
struc test temp;
4
5
6
int main(void){
7
.....
8
}
9
10
static struc test *x (int x){
11
12
Lock;
13
14
//mach irgendwas
15
16
Unlock;
17
18
return &temp; //Genau hier liegt meine Frage
19
}

Ich darf oder sollte beim Lesezugriff auf die Struktur nicht die Adresse 
der Temp - Variable zurück geben sondern sollte eher eine Kopie (Call by 
value) zurückgeben oder?

Also dass die Funktion dann so ausschaut:
1
static struc test x (int x){ //kein Pointer mehr
2
3
Lock;
4
5
//mach irgendwas
6
7
Unlock;
8
9
return temp; //Hier übergebe ich nicht die Adresse sondern die "Kopie"
10
}

Weil meine Überlegung ist, dass wenn ich jetzt die Adresse der 
Strukturvariable zurückgebe, aber im selben Augenblick es zu einem 
Schedule kommt und die Strukturvariable überschrieben wird, würde der 
erste, der den Zugriff hatte falsche Werte bekommen.

Stimmt das eigentlich so ?

Lg

von Metatroll (Gast)


Lesenswert?

Ist das nicht offensichtlich ? Die Ueberlegungen sind richtig.

von Johannes H. (Gast)


Lesenswert?

Vielen dank für die Antwort :)

Wenn ich zwei seperate Funktionen habe also die erste zum beschreiben 
und eines zum lesen der critical section, muss ich beide mit der selben 
mutex schützen oder?

von Root (Gast)


Lesenswert?

Das Rückgeben eines Pointers auf eine lokale Variable ist in jedem Fall 
falsch. das ist nicht auf Critical Sections begrenzt. Annahmen darüber 
zu machen, wie der Stack benutzt wird, NACHDEM eine Funktion verlassen 
wurde ist ... (mir fehlen die Worte) sehr sehr Schlecht

von Conny G. (conny_g)


Lesenswert?

Root schrieb:
> Das Rückgeben eines Pointers auf eine lokale Variable ist in jedem Fall
> falsch. das ist nicht auf Critical Sections begrenzt. Annahmen darüber
> zu machen, wie der Stack benutzt wird, NACHDEM eine Funktion verlassen
> wurde ist ... (mir fehlen die Worte) sehr sehr Schlecht

Hast nicht genau gelesen.

von Johannes H. (Gast)


Lesenswert?

Das heißt die Parameter einwr Funktionen, welche den Zutritt einer 
Critical Section regulieren, immer call-by-value zuweisen und nie 
call-by-reference

von batman (Gast)


Lesenswert?

Johannes H. schrieb:
> die Strukturvariable überschrieben wird, würde der
> erste, der den Zugriff hatte falsche Werte bekommen.

Das kommt drauf an, was man als "falsch" ansieht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.