本文共 1266 字,大约阅读时间需要 4 分钟。
xarray的实现在./lib/xarray.c中xarray 的解释如下:The XArray is an abstract data type which behaves like a very large arrayof pointers. It meets many of the same needs as a hash or a conventionalresizable array. Unlike a hash, it allows you to sensibly go to thenext or previous entry in a cache-efficient manner. In contrast to aresizable array, there is no need to copy data or change MMU mappings inorder to grow the array. It is more memory-efficient, parallelisableand cache friendly than a doubly-linked list. It takes advantage ofRCU to perform lookups without locking.总结一下,就是比hash可更高效的前后搜索,比数组高效是在数组增长的时候不用改变mmu 映射等。用法很简单,文档中给出的例子如下: void foo_init(struct foo *foo) { xa_init_flags(&foo->array, XA_FLAGS_LOCK_BH); } int foo_store(struct foo *foo, unsigned long index, void *entry) { int err; xa_lock_bh(&foo->array); err = xa_err(__xa_store(&foo->array, index, entry, GFP_KERNEL)); if (!err) foo->count++; xa_unlock_bh(&foo->array); return err; } /* foo_erase() is only called from softirq context */ void foo_erase(struct foo *foo, unsigned long index) { xa_lock(&foo->array); __xa_erase(&foo->array, index); foo->count--; xa_unlock(&foo->array); }
转载地址:http://ppnmi.baihongyu.com/