Thread Local Storage

Semua utas proses berbagi ruang alamat virtualnya. Variabel lokal fungsi bersifat unik untuk setiap utas yang menjalankan fungsi. Namun, variabel statis dan global dibagikan oleh semua utas dalam proses. Dengan penyimpanan lokal utas (TLS), Anda dapat menyediakan data unik untuk setiap utas yang dapat diakses proses menggunakan indeks global. Satu utas mengalokasikan indeks, yang dapat digunakan oleh utas lain untuk mengambil data unik yang terkait dengan indeks.

Konstanta TLS_MINIMUM_AVAILABLE menentukan jumlah minimum indeks TLS yang tersedia di setiap proses. Minimum ini dijamin setidaknya 64 untuk semua sistem. Jumlah maksimum indeks per proses adalah 1.088.

Ketika utas dibuat, sistem mengalokasikan array nilai LPVOID untuk TLS, yang diinisialisasi ke NULL. Sebelum indeks dapat digunakan, indeks harus dialokasikan oleh salah satu utas. Setiap utas menyimpan datanya untuk indeks TLS di slot TLS dalam array. Jika data yang terkait dengan indeks akan pas dalam nilai LPVOID , Anda dapat menyimpan data langsung di slot TLS. Namun, jika Anda menggunakan sejumlah besar indeks dengan cara ini, lebih baik mengalokasikan penyimpanan terpisah, mengonsolidasikan data, dan meminimalkan jumlah slot TLS yang digunakan.

Diagram berikut menggambarkan cara kerja TLS. Untuk contoh kode yang mengilustrasikan penggunaan penyimpanan lokal utas, lihat Menggunakan Penyimpanan Lokal Utas.

Diagram yang memperlihatkan cara kerja proses T L S.

Proses ini memiliki dua utas, Thread 1 dan Thread 2. Ini mengalokasikan dua indeks untuk digunakan dengan TLS, gdwTlsIndex1 dan gdwTlsIndex2. Setiap utas mengalokasikan dua blok memori (satu untuk setiap indeks) untuk menyimpan data, dan menyimpan pointer ke blok memori ini di slot TLS yang sesuai. Untuk mengakses data yang terkait dengan indeks, utas mengambil pointer ke blok memori dari slot TLS dan menyimpannya di variabel lokal lpvData.

Sangat ideal untuk menggunakan TLS di pustaka tautan dinamis (DLL). Misalnya, lihat Menggunakan Penyimpanan Lokal Utas di Pustaka Tautan Dinamis.

Penyimpanan Lokal Utas (Visual C++)

Menggunakan Penyimpanan Lokal Utas

Menggunakan Penyimpanan Lokal Utas di Pustaka Dynamic Link