Megosztás a következőn keresztül:


Szálak

A szálas olyan végrehajtási egység, amelyet az alkalmazásnak manuálisan kell ütemeznie. A szálak az őket ütemező szálak kontextusában futnak. Minden szál több szálat is ütemezhet. A rostok általában nem nyújtanak előnyöket a jól megtervezett többszálú alkalmazásokkal szemben. A szálak használata azonban megkönnyíti a saját szálak ütemezésére tervezett alkalmazások portozását.

Rendszer szempontjából a szál által végrehajtott műveleteket úgy tekintjük, hogy az azt futtató szál hajtotta végre. Ha például egy szál hozzáfér szál helyi tárolási (TLS), akkor az a futó szál helyi tárolóját éri el. Ezenkívül, ha egy szál meghívja a ExitThread függvényt, az azt futtató szál kilép. Azonban a szál nem rendelkezik minden olyan állapotinformációval, amely a szálhoz van társítva. A rostok egyetlen állapotinformációja a verem, a regiszterek egy részhalmaza és a szállétrehozás során megadott rostadatok. A mentett regiszterek olyan regiszterek, amelyeket általában egy függvényhívás során őriznek meg.

A rostok nincsenek előre ütemezve. Ütemezzen egy rostot úgy, hogy másik szálról vált rá. A rendszer továbbra is ütemezi a szálak futtatását. Ha egy szál futó szálak előre fel van adva, a jelenleg futó szál előre ki van jelölve, de továbbra is kiválasztva marad. A kiválasztott szál akkor fut, amikor a szál fut.

Az első szál ütemezése előtt hívja meg a ConvertThreadToFiber függvényt, hogy hozzon létre egy területet, ahol a szálállapot-információkat mentheti. A hívószál most a jelenleg futó szál. A szál tárolt állapotadatai közé tartoznak a ConvertThreadToFiberargumentumként átadott száladatok.

A CreateFiber függvény egy új szál létrehozására szolgál egy meglévő rostból; A híváshoz szükség van a verem méretére, a kezdőcímre és a száladatokra. A kezdőcím általában egy felhasználó által megadott függvény, az úgynevezett szálfüggvény, amely egy paramétert (a száladatokat) vesz igénybe, és nem ad vissza értéket. Ha a szálfüggvény visszatér, a szálat futtató szál kilép. A CreateFiberhasználatával létrehozott szálak végrehajtásához hívja meg a SwitchToFiber függvényt. Meghívhatja SwitchToFiber egy másik szál által létrehozott szál címével. Ehhez vissza kell adnia a címet a másik szálnak CreateFiber meghívásakor, és megfelelő szinkronizálást kell használnia.

A szál a GetFiberData makró meghívásával lekérheti a száladatokat. A szál bármikor lekérheti a szálcímet a GetCurrentFiber makró meghívásával.

Fibre Local Storage

A szálak szál helyi tárolási (FLS) használatával hozhatnak létre egyedi másolatot az egyes szálak változóiról. Ha nem történik szálváltás, az FLS pontosan ugyanúgy működik, mint szál helyi tárolási. Az FLS függvények (FlsAlloc, FlsFree, FlsGetValueés FlsSetValue) módosítják az aktuális szálhoz társított FLS-t. Ha a szál szálat hajt végre, és a szál át van kapcsolva, az FLS is átvált.

A szálhoz társított adatok törléséhez hívja meg a DeleteFiber függvényt. Ezek az adatok tartalmazzák a vermet, a regiszterek egy részhalmazát és a száladatokat. Ha a jelenleg futó szálhívások DeleteFiber, a szál ExitThread és leáll. Ha azonban egy szál kiválasztott szálát egy másik szálon futó szál törli, a törölt szálat tartalmazó szál valószínűleg rendellenesen leáll, mert a szálverem felszabadult.

Szálas