jiangxiaodun20
驱动牛犊
驱动牛犊
  • 注册日期2007-04-15
  • 最后登录2007-05-19
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:2011回复:4

有句语句不是很清楚,请高手指点

楼主#
更多 发布于:2007-05-19 12:12
#define get_cpu_var(var) (*({ preempt_disable(); &__get_cpu_var(var); }))
就是这条语句,这么多层括号的含义是什么?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-05-22 12:06
preempt_disable():防止被其他task抢占任务

__get_cpu_var(): 或取当前正在被调度的cpu的私有数据。

cpu的私有数据是2.6内核才引入的。
走走看看开源好 Solaris vs Linux
ggamma
驱动小牛
驱动小牛
  • 注册日期2007-02-15
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望180点
  • 贡献值0点
  • 好评度99点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-30 11:07
preempt_disable():防止被其他task抢占任务

__get_cpu_var(var): 或取当前正在被调度的cpu的私有数据,看来是返回一个变量或结构变量。
& :取其地址
{ preempt_disable(); &__get_cpu_var(var); }
加{},将其做为一个整体,和函数型语言相类,该语句"{}语句"返回最后计算的值。比如:
b=0;
b=({a=5;3;});
则b=3,a=5
为什么加个(),因为b={}语法出错。
* :取值
jiangxiaodun20
驱动牛犊
驱动牛犊
  • 注册日期2007-04-15
  • 最后登录2007-05-19
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-30 22:06
多谢赐教! 再问下2楼,你举的那个例子:
比如:
b=0;
b=({a=5;3;});
则b=3,a=5
这是不是一个固定的格式算法吗?



函数型语言相类?什么意思?
bass339
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-13 21:18
加{},是#define定义函数的一种写法,预防在编译时出现其他问题。例如该函数用在if中,如果没有{},这会把该函数分开了
游客

返回顶部