set_bit
是 Linux 內核中的一個宏,用于在給定的位數組中設置指定位
set_bit
的工作原理如下:
unsigned long
)的索引。這是通過將位號除以每個字節中的位數(通常為 64 位)來實現的。|
)將掩碼應用到目標字節上。這將確保目標位被設置為 1,而其他位保持不變。以下是 set_bit
的簡化示例實現:
#define BITS_PER_LONG 64
#define set_bit(nr, addr) \
((*(unsigned long *)(addr)) |= (1UL << ((nr) % BITS_PER_LONG)))
這里,nr
是要設置的位的位號,addr
是位數組的起始地址。
需要注意的是,set_bit
可能會導致內存重新排序和競爭條件,因此在多線程環境中使用時需要謹慎。為了避免這些問題,可以使用原子操作版本的 set_bit
,如 test_and_set_bit
。