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