Rückgabewert einer Critical Section

Gast #5212690
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
Gast #5212870
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?
Gast #5212908
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.