Reentrantni funkce

FreeBSD technol.user freebsd at ulovec.cz
Sat Mar 5 08:19:21 CET 2005


Ahoj,
pokusím se jen málo přispět do mlýna:
Reentrantní je termín, který se týká funkcí,podprogramů,... a v zásadě
se jedná o následující fintu:
Při volání funkce,podprogramu,.. funkce zpravidla přebírá nějaké
parametry a vytváří si sama datové struktury, s kterými dále pracuje.
Pokud je funkce ukončena, vrací občas nějakou hodnotu a zároveň uvolní
paměť alokovanou pro lokálně použité proměnné. To funguje v poho.
Otázkou je, co se stane, když nějaký proces zavolá funkci,ta začne něco
provádět, má alokovanou paměť pro proměnné a z nějakého důvodu na něco
čeká... pokud totiž v tu samou chvíli jiný proces zavolá tu samou
funkci, jsou dvě možnosti:
A) funkce použije pro proměnné již alokovaná místa z prvního volání
a nebo
B) funkce vytvoří kompletně nové proměnné.
Výsledek je, řekl bych, naprosto jasný.
A právě funkcím, které pracují ad B), říkáme reentrantní, t.j. schopné
vícenásobného současného běhu.
Napsat všechny funkce z API kernelu tak, aby byly reentrantní, není
žádná legrace. Jo a z tohoto vlastně vyplývá, že pojem reentrantní
kernel je dost nepřesný pojem. Mohu mít reentrantní funkce v API, ale ne
kernel.
PS:Nechci se rozepisovat do všech detailů a vědomě se dopouštím
nepřesností. Jde mi o princip,tak mě nechytejte nikdo za slova.
Jindra




More information about the Users-l mailing list