[LDD3速记]_per-CPU变量

一、特性

        当建立一个per-CPU变量时,系统的每个处理器都会有改变量的特有副本

        对per-CPU的访问无需锁定

        可以保存在高速缓存

        eg.:网络子系统(的计数器)


二、接口

#include <linux/percpu.h>

DEFINE_PER_CPU(type, name);
/* 编译期间创建per-CPU变量 */

DECLARE_PER_CPU(type, name);
/* 在模块中访问per-CPU变量前需声明 */

per_cpu(variable, int cpu_id)//访问其他处理器的变量副本
get_cpu_var(variable)//访问当前处理器的变量副本,可直接赋值或操作
put_cpu_var(variable)//结束访问
/*
使用编译期间的per-CPU变量
由于没有锁,可能会被抢占,因此需要上面的函数访问、修改、返回per-CPU变量
涉及多个处理器的per-CPU变量时需采用锁机制
*/

void *alloc_percpu(type);
void *__alloc_percpu(size_t size, size_t align);//满足特定对齐要求
void free_percpu(void *variable);
/* 分配及返回 */

int get_cpu( );
void put_cpu( );
per_cpu_ptr(void *variable, int cpu_id)
/* 使用动态分配的per-CPU变量 */

EXPORT_PER_CPU_SYMBOL(per_cpu_var);
EXPORT_PER_CPU_SYMBOL_GPL(per_cpu_var);
/* 将per-CPU变量导出给模块 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值