dbo:abstract
|
- A szálspecifikus tároló (Thread local strorage, TLS) egy , ami lehetőséget biztosít arra, hogy egy adott szálra nézve lehessenek statikus vagy globális változóink, memóriaterületünk. Ezt több helyen használják, ahol az egyszálú program helyettesítik vele, amik egy többszálú alkalmazásban nem lennének megfelelőek. Például egy errno nevű globális változót használ a sok C függvény hibaállapot-tárolásra. Amennyiben ez egy darab globális változó lenne, az egyik szál által beleírt hibakódot egy másik szál felülírhatja még azelőtt, hogy az első szál által beállított hibakóddal bármilyen más kódrészlet is foglalkozott volna (tehát mielőtt lekezelte volna az adott hibát). Erre a problémára lehet megoldás jelen tervezési minta alkalmazása, amiben például a hibaállapotot jelző errno változó globálisnak néz ki a szálon belülről, viszont a valóságban ez egy adott szálra lokális. Egy másik alkalmazási lehetősége az, amikor több szál gyűjt információt egyetlen globális változóba. Ahhoz, hogy elkerüljük a versenyhelyzetet (race condition), kölcsönös kizárást (mutual exclusion) kell alkalmaznunk. Ennek alternatívája lehet az, hogy minden szál rendelkezik egy adott szálra lokális változóval (defínció szerint ezeket a változókat másik szálból nem lehet sem olvasni, sem írni, tehát nem léphet fel versenyhelyzet), amiben az adatokat összegezheti, gyűjtheti. Ezt követően mindösszesen annyi a dolgunk, hogy a szálak által összegyűjtött információkat akkumuláljuk egy valóban globális változóba. Sok rendszer korlátozza a szálbiztos tároló méretét, gyakran erősen. Azonban, ha legalább egy mutatóra elegendő helyet biztosít a rendszer, azáltal tetszőleges méretű memóriablokkot használhatunk minden szál esetében, aminek a kezdőcímét tároljuk csak el a szálspecifikus tárolóban, így valójában ez sem feltétlen jelent komoly korlátozást. (hu)
- A szálspecifikus tároló (Thread local strorage, TLS) egy , ami lehetőséget biztosít arra, hogy egy adott szálra nézve lehessenek statikus vagy globális változóink, memóriaterületünk. Ezt több helyen használják, ahol az egyszálú program helyettesítik vele, amik egy többszálú alkalmazásban nem lennének megfelelőek. Például egy errno nevű globális változót használ a sok C függvény hibaállapot-tárolásra. Amennyiben ez egy darab globális változó lenne, az egyik szál által beleírt hibakódot egy másik szál felülírhatja még azelőtt, hogy az első szál által beállított hibakóddal bármilyen más kódrészlet is foglalkozott volna (tehát mielőtt lekezelte volna az adott hibát). Erre a problémára lehet megoldás jelen tervezési minta alkalmazása, amiben például a hibaállapotot jelző errno változó globálisnak néz ki a szálon belülről, viszont a valóságban ez egy adott szálra lokális. Egy másik alkalmazási lehetősége az, amikor több szál gyűjt információt egyetlen globális változóba. Ahhoz, hogy elkerüljük a versenyhelyzetet (race condition), kölcsönös kizárást (mutual exclusion) kell alkalmaznunk. Ennek alternatívája lehet az, hogy minden szál rendelkezik egy adott szálra lokális változóval (defínció szerint ezeket a változókat másik szálból nem lehet sem olvasni, sem írni, tehát nem léphet fel versenyhelyzet), amiben az adatokat összegezheti, gyűjtheti. Ezt követően mindösszesen annyi a dolgunk, hogy a szálak által összegyűjtött információkat akkumuláljuk egy valóban globális változóba. Sok rendszer korlátozza a szálbiztos tároló méretét, gyakran erősen. Azonban, ha legalább egy mutatóra elegendő helyet biztosít a rendszer, azáltal tetszőleges méretű memóriablokkot használhatunk minden szál esetében, aminek a kezdőcímét tároljuk csak el a szálspecifikus tárolóban, így valójában ez sem feltétlen jelent komoly korlátozást. (hu)
|