爲什麼升壓無鎖尺寸固定爲65535個物體?爲什麼增強無鎖定freelist大小限制爲最多65535個對象?
typedef boost::lockfree::queue<int, boost::lockfree::fixed_size<true>> MyQueue;
MyQueue queue(1024*100);
上面的代碼會拋出異常。
我在代碼中發現的推理是基於數組的freelist只支持16位地址空間。
這是什麼原因?我在64位Linux機器上使用它。那麼爲什麼限制尋址2 ** 16項目?該隊列是否使用'short int'進行索引?原子指令是否僅適用於16位字長?
我應該怎麼做才能擁有比此容量更大的固定大小的隊列?
我評論中freelist.hpp會拋出異常,如果大小超過65535的代碼,它似乎工作正常,但我沒有看到在性能上有較大提升:( – weima
65535是一個無符號'的short'的最大尺寸,也許它有事情做與 –
@IosifM,你是對的。我看到有一類叫做tagged_index使用兩個16位變量,和在一起這成爲其reintrpreted用作索引的32位變量。並且,因爲它使用原子交換,它使用針對32位,但我的問題仍然存在,爲什麼它限制在16,如果讓32位,並且仍原子指令可以工作 – weima