Hãy đọc số Wikipedia entry.
Bộ nhớ cục bộ không phải là thứ đặc trưng cho C++. Đôi khi nó đi theo các tên khác nhau, như "TLS" (chỉ viết tắt của bộ nhớ cục bộ) hoặc "lưu trữ theo chủ đề cụ thể" (TSS).
Hầu hết các hệ điều hành đều cung cấp API để truy cập bộ nhớ theo luồng. Ví dụ: Windows có số bunch of API functions bắt đầu bằng "TLS". Dưới mui xe, Win32 có một khu vực đặc biệt cho một loạt các dữ liệu trên mỗi luồng, bao gồm cả lưu trữ cục bộ của người dùng, có thể truy cập thông qua một thanh ghi CPU cụ thể (FS trên x86). Linux cung cấp lưu trữ theo chủ đề cụ thể thông qua các API pthread, với các tên như pthread_key_create và chúng thường được triển khai bằng cách sử dụng một kỹ thuật tương tự.
Có thể một hệ điều hành không cung cấp bất kỳ hỗ trợ nào. Tuy nhiên, nếu hệ điều hành cung cấp một ID luồng quá trình duy nhất thông qua một API, thì thư viện thời gian chạy C++ có thể duy trì một cái gì đó theo khái niệm như một số std::map<thread_id, per_thread_storage>
trong nội bộ. Tất nhiên, sau đó có một vấn đề của những gì per_thread_storage
là. Nếu một chương trình được liên kết tĩnh, nó có thể chỉ là một cái gì đó giống như một con trỏ tới một cấu trúc lớn với tất cả các biến lưu trữ thread-local được khai báo trong chương trình như là các phần tử. Đây là một sự đơn giản hóa, nhưng bạn có được ý tưởng chung.
Truy cập các biến lưu trữ cục bộ theo chủ đề rõ ràng không chỉ là đọc hoặc ghi bộ nhớ thẳng. Nó có khả năng liên quan nhiều hơn thế. Nếu bạn định sử dụng lưu trữ thread-local/cụ thể rất nhiều trong một hàm cụ thể, tôi khuyên bạn nên sao chép con trỏ lưu trữ thread-local vào một biến cục bộ trước tiên.
Tiêu chuẩn C++ có chi tiết triển khai bằng không (hoặc rất ít). –
Giờ đây, bạn có thể trợ giúp: http://www.akkadia.org/drepper/tls.pdf –