Семантика реалізації статичної нитки знаходиться нижче рівня IL в компіляторі .NET jit. Компіляторам, які випромінюють IL, як VB.NET і C #, не потрібно нічого знати про T32 Win32, щоб випромінювати код IL, який може читати та записувати змінну, яка має атрибут ThreadStatic. На зміну немає нічого особливого, наскільки C # знає - це просто місце для читання та написання матеріалів. Те, що у нього є атрибут, не має жодного наслідку для C #. C # потрібно знати лише, щоб передавати інструкції IL для читання або запису цього імені символу.
"Важкий підйом" виконується основним CLR, який відповідає за те, щоб IL працював над конкретною апаратною архітектурою.
Це також би пояснило, чому розміщення атрибута на невідповідному (нестатичному) символі не отримує реакції від компілятора. Компілятор не знає, якої особливої семантики потрібен атрибут. Однак інструменти аналізу коду, такі як FX / Cop, повинні знати про це.
Ще один спосіб переглянути це: CIL визначає набір областей зберігання: статичне (глобальне) зберігання, зберігання членів та зберігання стеків. TLS не входить до цього списку, дуже ймовірно, оскільки TLS не потрібно бути в цьому списку. Якщо інструкцій з читання та запису ІЛ достатньо для доступу до TLS, коли символ позначений атрибутом TLS, чому IL повинен мати якесь спеціальне представлення або лікування для TLS? Це не потрібно.