Szál helyi tárolója
A folyamat összes szála osztozik a virtuális címtéren. A függvények helyi változói egyediek a függvényt futtató összes szálra vonatkozóan. A statikus és globális változókat azonban a folyamat összes szála megosztja. A szál helyi tárolási (TLS) segítségével minden olyan szálhoz egyedi adatokat adhat meg, amelyeket a folyamat globális index használatával érhet el. Az egyik szál lefoglalja az indexet, amelyet a többi szál használhat az indexhez társított egyedi adatok lekéréséhez.
Az állandó TLS_MINIMUM_AVAILABLE határozza meg az egyes folyamatokban elérhető TLS-indexek minimális számát. Ez a minimum minden rendszer esetében garantáltan legalább 64 lesz. Az indexek maximális száma folyamatonként 1088.
A szálak létrehozásakor a rendszer LPVOID értékek tömbjeit foglalja le a TLS-hez, amelyek NULL értékre vannak inicializálva. Az indexek használata előtt az indexet az egyik szálnak kell lefoglalnia. Minden szál egy TLS-index adatait egy TLS-pontban tárolja, a tömbben. Ha az indexhez társított adatok elférnek egy LPVOID értékben, az adatokat közvetlenül a TLS-ponton tárolhatja. Ha azonban nagy számú indexet használ így, jobb, ha külön tárterületet foglal le, összesíti az adatokat, és minimalizálja a használatban lévő TLS-tárolóhelyek számát.
Az alábbi ábra a TLS működését mutatja be. A szál helyi tároló használatát szemléltető példakódért lásd A Szál helyi tároló használatacímű témakört.
A folyamat két szálból áll, az 1. és a 2. szálból. Két indexet foglal le a TLS, a gdwTlsIndex1 és a gdwTlsIndex2 használatához. Minden szál két memóriablokkot foglal le (mindegyik indexhez egyet), amelyben tárolni szeretné az adatokat, és a megfelelő TLS-tárolóhelyeken tárolja a mutatókat ezekhez a memóriablokkokhoz. Az indexhez társított adatok eléréséhez a szál lekéri a mutatót a memóriablokkhoz a TLS-pontból, és az lpvData helyi változóban tárolja.
Ideális a TLS használata dinamikus csatolású kódtárakban (DLL-ben). Példa: Szál helyi tároló használata dinamikus csatolású tárban.
Kapcsolódó témakörök
-
Szál helyi tárolási használata