set_bit()
来源:互联网 发布:男生穿长筒袜 知乎 编辑:程序博客网 时间:2024/06/05 10:25
将addr的第nr位置为1
假设*addr = 0, nr = 3;则执行结果为1000(二进制数)
(1)如果nr>31则将nr的高27为截取后(作为10进制数)加到addr,
(2)截取nr的低5位,然后将1左移(低5位对应的10进制数)。这样做是为了解决当nr大于31时,将1左移32位或者更多将会导致溢出(因为mask是int型,而int型在linux中是32位长)
(3)将第nr位置为1
0x1f(16) = 11111(2) = 31(10)
假设*addr = 0, nr = 3;则执行结果为1000(二进制数)
extern __inline__ int set_bit(int nr,long * addr)
{
int mask, retval;
addr += nr >> 5; //(1)
mask = 1 << (nr & 0x1f); //(2)
cli();
retval = (mask & *addr) != 0;
*addr |= mask; //(3)
sti();
return retval;
}
{
int mask, retval;
addr += nr >> 5; //(1)
mask = 1 << (nr & 0x1f); //(2)
cli();
retval = (mask & *addr) != 0;
*addr |= mask; //(3)
sti();
return retval;
}
(1)如果nr>31则将nr的高27为截取后(作为10进制数)加到addr,
(2)截取nr的低5位,然后将1左移(低5位对应的10进制数)。这样做是为了解决当nr大于31时,将1左移32位或者更多将会导致溢出(因为mask是int型,而int型在linux中是32位长)
(3)将第nr位置为1
0x1f(16) = 11111(2) = 31(10)
- set_bit()
- set_bit()
- set_bit()
- test_bit、set_bit和clear_bit
- linux arm set_bit分析
- linux kernel set_bit() 函数解析
- set_bit、clear_bit、wait_on_bit_lock、wake_up_bit整理
- set_bit(nr,p)函数分析
- 九、set_bit(int nr,long * addr)
- set_bit(unsigned int bit,volatile unsigned long *p)研究
- set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
- 几个ASP.NET中容易忽略但却很重要的方法函数
- Rails 的两个核心思想
- 在 ASP.NET 中执行 URL 重写[网淘]
- 专家分享Oracle数据库业务优化心得
- 过时的幽默 ---酒店小姐的幽默
- set_bit()
- 深入理解 ASP.NET 与客户端缓存 (Part 2 - ASP.NET 支持)
- execCommand指令集
- 停用词的自动检测
- Ajax表单提交实例
- 关于有限状态机
- 精妙的SQL语句
- 我真的很烦跟女人交流思想,难道女人天生就是生育工具?
- ASP.NET 中 Cookie 的基本知识