Bộ nhớ cục bộ chỉ áp dụng cho các biến tĩnh. Không có điểm trong việc tạo cấu trúc non-static hoặc các thành viên của lớp-local.
Biến cục bộ (tự động) luôn dành riêng cho chuỗi thực thi mã, nhưng biến toàn cục và biến tĩnh được chia sẻ giữa các chuỗi vì chúng nằm trong phân đoạn dữ liệu hoặc BSS. TLS cung cấp một cơ chế để làm cho các biến toàn cầu cục bộ thành luồng và đó là những gì mà từ khóa __thread
đạt được - nó hướng dẫn trình biên dịch tạo ra một bản sao riêng biệt của biến trong mỗi luồng trong khi từ điển nó vẫn là một biến toàn cục. các hàm khác nhau được gọi trong cùng một luồng thực thi).
Thành viên và cấu trúc lớp không tĩnh được đặt ở cùng một nơi mà đối tượng (lớp hoặc cấu trúc) được phân bổ - hoặc trên ngăn xếp nếu một biến tự động được khai báo hoặc trong heap nếu sử dụng new
hoặc malloc()
. Dù bằng cách nào, mỗi luồng sẽ nhận được một vị trí lưu trữ duy nhất cho biến và __thread
chỉ không áp dụng được trong trường hợp này do đó lỗi trình biên dịch bạn nhận được.
Nguồn
2012-06-12 14:53:22
Vui lòng đăng lỗi trình biên dịch bạn đang nhận được. –
AFAICS '__thread' không phải là tiêu chuẩn. Bạn đang sử dụng trình biên dịch nào? –