本文共 1008 字,大约阅读时间需要 3 分钟。
linux 3.18
在linux内核中有很多位运算函数,如:set_bit,clear_bit,clear_bit,test_and_set_bit等等。
1. set_bit static inline void set_bit(unsigned int nr, volatile unsigned long *addr) 在起始地址为addr的位图中设置第nr位;是原子操作。 2. __set_bit static inline void set_bit(unsigned int nr, volatile unsigned long *addr) 在起始地址为addr的位图中设置第nr位;非原子操作。 3. clear_bit static inline void clear_bit(int nr, volatile unsigned long *addr) 清除起始地址为addr的位图中的第nr位,改操作是原子操作但不具有加锁功能,若要用于加锁目的,应当调用smp_mb__before_clear_bit 或smp_mb__after_clear_bit函数,以确保任何改变在其他的处理器上是可见的。 4. change_bit static inline void change_bit(int nr, volatile unsigned long *addr) 在起始地址为addr的位图中改变第nr位; 5. test_and_set_bit static inline int test_and_set_bit(int nr, volatile unsigned long *addr) 在起始地址为addr的位图中设置第nr位;并返回原来的值,原子操作。 6. test_and_clear_bit static inline int test_and_clear_bit(int nr, volatile unsigned long *addr) 在起始地址为addr的位图中清除第nr位;并返回原来的值,原子操作。 7. test_and_change_bit static inline int test_and_change_bit(int nr, volatile unsigned long *addr) 在起始地址为addr的位图中更改第nr位;并返回原来的值,原子操作。转载地址:http://ulbji.baihongyu.com/