( micsa | 2024. 07. 23., k – 17:24 )

 

HIBÁS ez is. Az már a multitasking lenne, amiről itt beszélsz, kevered a dolgokat. Multitaskingnál elvárás ugyanis, hogy az állapot bármikor megszakítható és 1:1-ben helyreállítható legyen, és annál le is van ez írva: "Ilyenkor jellemzően az összes többi regiszter is mentődik az utasításszámlálóval együtt". Multithreadingnél ilyen nincs, ott csak annyi az elvárás, hogy a clobbered registers-ek vissza legyenek állítva, semmi több. Szó sincs a teljes belső processzorállapot mentéséről, még véletlenül se.

A regisztereket thread-eknél is elmenti, minden egyes alkalommal (linuxon 1000szer másodpercenként per processzormag)... "multi-threading" s a "multi-tasking" között itt csak az a különbség, hogy lesz-e address space change vagy nem... 

 

Ez sem pontos. Erre van a thread_local kulcsszó, aminek hatására egy dedikált regiszter relatív címzési módot fordít a fordító, az ilyen tárolási osztályú változókat pedig egy külön szegmensbe gyűjti a linker (Linux-on és Windows-on is egyaránt).

megint félrebeszélsz: itt az lett elmondva, hogy a globális változóknál már figyelni kell, nem szabad feltételezni, hogy csak ez a thread matathat hozzá.

pl. egy sima increment lehet, hogy nem atomikus, mert nincs mutex/nincs lock prefix. Hogy jön ide a thread local storage?