Tại sao kích thước lockfree tăng được cố định lên 65535 đối tượng?lý do tại sao tăng kích thước tự do lockfree được giới hạn tối đa là 65535 đối tượng?
typedef boost::lockfree::queue<int, boost::lockfree::fixed_size<true>> MyQueue;
MyQueue queue(1024*100);
Mã trên ném trường hợp ngoại lệ.
lý do tôi tìm thấy trong mã là các nhà tự do dựa trên mảng chỉ hỗ trợ không gian địa chỉ 16bit.
lý do cho việc này là gì? Tôi đang sử dụng nó trên máy Linux 64bit. thì tại sao giới hạn địa chỉ cho 2 ** 16 mục? hàng đợi có sử dụng 'short int' để lập chỉ mục không? sao các lệnh nguyên tử chỉ hoạt động với kích thước từ 16 bit?
Tôi nên làm gì để có hàng đợi có kích thước cố định với dung lượng lớn hơn số lượng này?
tôi đã nhận xét mã trong freelist.hpp mà ném ngoại lệ nếu kích thước lớn hơn 65535, có vẻ như hoạt động tốt nhưng tôi không thấy cải thiện nhiều về hiệu suất: ( – weima
65535 là kích thước tối đa của 'unsigned short', có thể nó có một cái gì đó để làm với rằng –
@IosifM., bạn là đúng.Tôi thấy rằng có một lớp được gọi là tagged_index trong đó sử dụng hai biến 16 bit, và cùng nhau này trở thành một biến 32 bit được reintrpreted được sử dụng như một chỉ mục. và kể từ khi nó sử dụng hoán đổi nguyên tử, nó sử dụng 32bits cho điều đó.Nhưng câu hỏi của tôi vẫn còn lý do tại sao giới hạn nó đến 16? Nếu làm cho nó 32 bit và vẫn còn nguyên tắc hướng dẫn có thể làm việc – weima