Wat betekent reetrant code?

Gevonden met Google zoeken:
http://www.avocetsystems.com/company/articles/magazine/areentra.htmEen routine moeten voldoen aan de volgende voorwaarden te worden reentrant:
Zij nooit wijzigt zelf.
Dat is, de instructies van het programma zijn nooit veranderd.
Periode.
Onder alle omstandigheden.
Veel te veel ingebedde systemen nog schenden deze kardinale regel.
Variabelen of veranderd door de routine moet worden toegewezen aan een bepaalde 'aanleg' van de functie's aanroepen.
Dus als reentrant FOO functie wordt aangeroepen door drie verschillende functies, dan FOO

de gegevens moeten worden opgeslagen in drie verschillende gebieden van het RAM-geheugen.De ANSI-C Standaard zegt:De functies in de standaard library is niet gegarandeerd worden reentrant en kunnen wijzigen objecten met statische opslag duur.
Dus een signaal handler kan niet, in het algemeen, bel standaard bibliotheek functies.
 
Kort betekent een procedure die kan worden onderbroken en opnieuw uit de onderbreking handler en dit kan worden genest.
Varuzhan

 
Reentrant code maakt uitgebreid gebruik van semaforen.Wanneer de controle voert een code gedeelte waar enkele globale variabele wordt gewijzigd, code moet eerst de semafoor voor het bewerken en na het gebeuren te herstellen, de variabele passende waarde en vervolgens de semafoor.

Basicallt reentrant code moet proberen gebruik te maken van lokale variabelen zo veel als het kan.

 
In eenvoudige het betekent,
Een functie is reentrant indien, terwijl deze wordt uitgevoerd, kan opnieuw worden ingeroepen door zelf, of door een andere routine, door onderbreking van de uitvoering voor een tijdje.

Er zijn weinig thumbrules die u kunt vinden via google

Sante
idlebrain

 
Beste allemaal,
Ik probeer RTOS voor 8051, maar ik heb probleem met de term reentrant Functies in RTX51 Tiny.Ik geloof niet begrijpen deze term, dus kan iemand helpen en mij vertellen het verschil tussen reentrant Functies en andere functies c.
Hier is de context van reentrant Functies steun van Keil.

"De C51 Compiler biedt ondersteuning voor reentrant functies. Reentrant functies slaan parameters en lokale variabelen op een reentrant stack. Dit beschermt hen van recursieve of gelijktijdige gesprekken. RTX51 Tiny bevat geen beheer voor het C51 reentrant stack. Dus, als u gebruik reentrant functies in uw aanvraag, moet u ervoor zorgen dat deze functies niet bellen naar alle RTX51 Tiny systeem werkt en dat reentrant functies niet onderbroken door ronde-robin taak schakelen.
C functies, die het gebruik registreert enkel voor parameter en automatische variabelen, zijn inherent reentrant en kan worden opgeroepen zonder beperkingen uit RTX51 Tiny.
Niet-reentrant C-functies kunnen niet worden opgeroepen uit meer dan een taak of onderbreken procedure.Niet-reentrant C51 functies slaan hun parameters en automatische variabelen (lokale gegevens) in statische geheugen segmenten die kan worden overschreven wanneer de functie wordt aangeroepen vanuit meerdere taken tegelijkertijd of recursief.
U mag zich beroepen op de niet-reentrant functies van meerdere taken als u ervoor zorgen dat deze niet recursief (tegelijkertijd).Meestal betekent dit dat round robin-taak plannen moeten worden uitgeschakeld en dat uw niet-reentrant functies mogen niet bellen naar alle RTX51 Tiny systeem functies.
Opmerking
U moet uitschakelen Round-Robin Task Switching indien u wenst te beroepen op reentrant of niet-reentrant functie van meer dan een taak of onderbreken.
"
Bedankt voor jouw hulp,
Met vriendelijke groet,

 
Reentrant code is code die kan worden aangeroepen door een aantal draden, zelfs dezelfde draad.Kortom, elke keer dat een draad roept de routine het wordt een pointer naar een eigen set van gegevens (met uitzondering van statische gegevens zou ik neem aan).U kunt zich de problemen die zich zouden voordoen indien meerdere threads riep dezelfde routine en alle van hen gehandeld op dezelfde set van gegevens.Het alternatief is vergrendeling gegevens die niet veel van een alternatief.

 
Hi all,
Mijn vraag is hoe het schrijven van een reentrant functie en?Natuurlijk, het
is afwijken van de normale functies, maar hoe?
een typische functie:
void hallo (void)
(
int x;
x = 835;
.........
printf (x);
printf ( "Hallo iedereen!");
)
en de reentrant functie zijn:
????
????
????
Dank voor uw antwoorden
met vriendelijke groet,

 
Verwijst naar s / w (een functie) die kunnen worden uitgevoerd meerdere malen
tegelijkertijd.
Een reentrant functie veilig kan worden opgeroepen uit meerdere taken.

 
haha,
nergens goed voor

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top