Citat:
Ursprungligen postat av
JohnnyMnemonic
Du använder static för temp variabeln helt i onödan, det gör att den inte är reentrant.
Trådsäker är inte funktionen oavsett vilket.
—-
Edit:
För att förtydliga funktioner kan vara trådsäkra men inte reentranta och vice versa, kombinationen av de båda eller inget av dom.
Precis. Utan static hade det ju varit trådsäkert så länge olika trådar inte arbetar mot samma stackinstans.
För att kunna arbeta mot samma stack från flera trådar krävs dock att stora delar av koden skyddas av diverse låsmekanismer eller skrivs lock-free. Något som inte är trivialt att få korrekt.
Själva införandet av static-variabel var ju dessutom onödigt.
Det gjordes för att skydda mot oavsiktlig modifiering av innehållet genom att returnera en kopia.
Den ursprungliga funktionen gjorde ju redan detta då den gjorde return-by-value till skillnad från den modifierade varianten.
Sen är ju den ursprungliga koden inte något under av elegans heller.
1. Inte generisk. Kan enbart hantera integers.
2. Bristfälliga returkoder. T.ex bör ju push meddela ifall det misslyckas. Där det rapporteras fel sker det med in-band signalering så att du inte kan lagra MIN_INT på stacken.