linux kernel synchronization 2

news/2025/9/20 22:33:49/文章来源:https://www.cnblogs.com/fangdroid/p/19102932

Per CPU Variables

  • A CPU should not access the elements of the array corresponding to other CPU.
  • 每个CPU拥有该变量的独立副本
  • 无需加锁 - 由于每个CPU只操作自己的副本,因此读写自己的副本时不会产生竞争条件
  • 缓存优化 - 每个数据结构在主存中对齐,确保每个数据结构落在硬件缓存的不同行,提高缓存命中率
点击查看代码
// 获取当前CPU ID并禁用抢占
int cpu = get_cpu(); 
// 在这里执行需要在当前CPU上运行的代码
// 重新启用抢占
put_cpu();#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/percpu.h>MODULE_LICENSE("GPL");//定义per cpu 变量
DEFINE_PER_CPU(int, counter);static int __init test_hello_init(void)
{int num_cpus = num_online_cpus();int i = 0;int val;pr_info("Number of cpus available:%d\n", num_cpus);for (i = 0; i < num_cpus; i++) {int value = per_cpu(counter, i); //获取per cpu counter变量pr_info("Value of counter is %d at Processor:%d\n", value, i);}get_cpu_var(counter) = 10; //获取per cpu counter变量pr_info("Printing counter value of all processor after updating current processor:%d\n",smp_processor_id());put_cpu_var(counter);for (i = 0; i < num_cpus; i++) {int value = per_cpu(counter, i);pr_info("Value of counter is %d at Processor:%d\n", value, i);}return -1;
}static void __exit test_hello_exit(void)
{pr_info("%s: In exit\n", __func__);
}module_init(test_hello_init);
module_exit(test_hello_exit);

Dynamically allocated per-CPU variables

点击查看代码
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/percpu.h>MODULE_LICENSE("GPL");static int *dynamic_counter;static int __init test_hello_init(void)
{int cpu = get_cpu();int i;dynamic_counter = alloc_percpu(int);pr_info("cpu:%d\n", cpu);*per_cpu_ptr(dynamic_counter, cpu) = 1000;put_cpu();for (i = 0; i < num_online_cpus(); i++)pr_info("cpu:%d\tcounter:%d\n",i, *per_cpu_ptr(dynamic_counter, i));free_percpu(dynamic_counter);return -1;
}static void __exit test_hello_exit(void)
{pr_info("%s: In exit\n", __func__);
}module_init(test_hello_init);
module_exit(test_hello_exit);
只能保护多个cpu并发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高阶查询语句与视图实战指南 - 指南

MySQL高阶查询语句与视图实战指南 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

订单未支付多种方案

1、微服务常用MQ 2、单体情况下常用定时任务

耳鸣针灸学位

耳鸣针灸学位足驷马 中九里 灵骨 叉三 行间 肾关 太溪 牵引针患侧 听宫或者耳门

Twincat 中如何将位变量链接到字节

最近在测试一个EtherCAT IO模块, 参考视频Ethercat总线快速入门教程——1-2TwinCAT基本操作_哔哩哔哩_bilibili 我手里是欧辰的一个模块,它的输入输出都是字节形式的因此小改了下PLC程序 1. 在DUTs中新建了一个结构体…

不管不管,就要你的特殊对待(权限)

特殊权限,文件特殊属性除rwx(读写执行)三种文件权限外,还有哪些权限呢? 一.SUID 1.是什么? “以文件所有者的身份运行程序”。主要作用于可执行文件。 当一个可执行文件设置了 SUID 位时,任何用户在执行该文件时,…

202003_攻防世界_功夫再高也怕菜刀

流量分析,文件分离,WebShellTags:流量分析,文件分离,WebShell 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202003_攻防世界_功夫再高也怕菜刀.zi…

工业软件:重塑协同流程、降低制造成本的关键器具

工业软件:重塑协同流程、降低制造成本的关键器具pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

实用指南:【2025最新版】PCL点云处理算法汇总(C++长期更新版)

实用指南:【2025最新版】PCL点云处理算法汇总(C++长期更新版)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

Gemini Proxy for Xcode 26

总的来说体验一塌糊涂,还不如Cursor/Trae或者是vscode装CLINE/RooCode等插件,更别提用Claude Code(虽然Xcode内置了,但是Claude Code官方明确不给中国大陆使用),需要一些手段来绕过进行使用, Xcode支持open AI 的一些接…

本地布署Qwen-Image全量蒸馏加速模型 - yi

本地布署Qwen-Image全量蒸馏加速模型一,#本机环境检查 执行nvidia-smi,查看右上角。验证显卡驱动已安装最高支持的版本。nvidia-smi执行nvcc -V验证cudanvcc -V执行conda --version验证conda版本conda --version#列出…

Android常用ADB命令

截屏adb shell screencap -p /sdcard/screenshot.png -p参数:保存PNG图片

【2025PolarCTF秋季个人赛】WEB方向部分wp

white 打开靶机,发现可以执行命令,但是进行了严格的过滤 可以执行的命令是一个白名单 ls pwd whoami date echo base64 sh白名单命令下方告知了过滤规则,比如禁止危险函数和过滤特殊字符等。有意思的是,这里虽然说…

电池热失控(Thermal Runaway of the Battery) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人工智能大模型 基础知识汇总

GGUF、Safetensors、ONNX三种格式 https://blog.csdn.net/woshihlf/article/details/149123005transformers框架中将SafeTensors模型转换为ONNX https://zhuanlan.zhihu.com/p/29952689792

小米手机刷机+root权限

前言: 刷机前需要先解锁(BL):https://www.miui.com/unlock/download.html(下载工具后解锁,审核通过后能刷机) (xiaomi 11 pro为例) 刷机工具和rom # 下载小米刷机工具 https://xiaomirom.com/download-xiaomi…

深入解析:【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(1):智绘旅程构建文旅新基建

深入解析:【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(1):智绘旅程构建文旅新基建2025-09-20 21:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !i…

vba里运行miniblink

vba里运行miniblinkminiblink是一个开源的、单文件、且目前已知的最小的基于chromium的,浏览器控件。通过其导出的纯C接口,几行代码即可创建一个浏览器控件。 我扫了下下最新的mb132版本,粗略地看了下mb的头文件,看样…

Android Studio无线调试手表App

参考https://developer.android.google.cn/training/wearables/get-started/debugging?hl=zh-cn Android手表上操作,打开开发者选项,打开ADB调试,打开无线调试,配对新设备。 Android Studio中打开Terminal窗口(Al…

2025 CCPC 江西省赛 南昌邀请赛 ABCDEGHKL

A.扭蛋 思维。 考虑最坏情况,一定是每次都获得数量最多的那个扭蛋,那除掉一个之后多余的数可以拿来换数量少的扭蛋,若当前 \(a_i - 1\) 加上之前存的多余的扭蛋数大于等于了 \(i-1\) ,说明后面的扭蛋都可以换。点击…