Citat:
Ursprungligen postat av
JohnnyMnemonic
Du anvnder static fr temp variabeln helt i ondan, det gr att den inte r reentrant.
Trdsker r inte funktionen oavsett vilket.
-
Edit:
Fr att frtydliga funktioner kan vara trdskra men inte reentranta och vice versa, kombinationen av de bda eller inget av dom.
Precis. Utan static hade det ju varit trdskert s lnge olika trdar inte arbetar mot samma stackinstans.
Fr att kunna arbeta mot samma stack frn flera trdar krvs dock att stora delar av koden skyddas av diverse lsmekanismer eller skrivs lock-free. Ngot som inte r trivialt att f korrekt.
Sjlva infrandet av static-variabel var ju dessutom ondigt.
Det gjordes fr att skydda mot oavsiktlig modifiering av innehllet genom att returnera en kopia.
Den ursprungliga funktionen gjorde ju redan detta d den gjorde return-by-value till skillnad frn den modifierade varianten.
Sen r ju den ursprungliga koden inte ngot under av elegans heller.
1. Inte generisk. Kan enbart hantera integers.
2. Bristflliga returkoder. T.ex br ju push meddela ifall det misslyckas. Dr det rapporteras fel sker det med in-band signalering s att du inte kan lagra MIN_INT p stacken.