【发布时间】:2015-10-09 18:41:01
【问题描述】:
我正在寻找以下代码行的说明(x86 机器)或优化:
lock()
int x = ffs(words); // find first bit that set
long words = unset(x, words); // unset the bit "x" in "words"
unlock()
如果不加锁,我不知道该怎么做。
【问题讨论】:
-
我怀疑你可以,除非有机器指令允许这种类型的操作。
-
我担心您需要为此设置一个比较和交换自旋循环。位域有多宽?
-
二分查找至少会产生这样的循环 O(log)。尽管您在决策上花费的时间可能比理论上节省的时间要多,尤其是当您认为展开不切实际时。
-
“第一”是最重要的还是最不重要的?
-
这是最少的,根据
ffs()函数。我暂时只需要 64 位或 128 位。
标签: optimization locking bit-manipulation atomic