当前位置: 首页 > news >正文

官方网站建设 磐石网络多少费用家居企业网站建设案例

官方网站建设 磐石网络多少费用,家居企业网站建设案例,关键字搜索网站怎么做,营口企业网站建设在之前的文章中我们已经了解了RCU机制的原理和Linux的内核源码,这里我们要根据RCU机制写一个demo来展示他应该如何使用。 RCU机制的原理 RCU(全称为Read-Copy-Update),它记录所有指向共享数据的指针的使用者,当要修改构想数据时&…

在之前的文章中我们已经了解了RCU机制的原理和Linux的内核源码,这里我们要根据RCU机制写一个demo来展示他应该如何使用。

RCU机制的原理

  • RCU(全称为Read-Copy-Update),它记录所有指向共享数据的指针的使用者,当要修改构想数据时,首先创建一个副本,并在副本中修改,所哟访问线程都离开读临界区后,使用者的指针指向修改后的副本,并且删除旧数据。

  • 他是一种在共享数据结构中实现高效读取和低延迟写入操作的技术。在Linux内核中,RCU是一种基于时间窗口的锁机制,通过充分利用多核处理器和内存系统的特性,在保证并发性的同时提供高性能。

代码示例

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/spinlock.h>
#include <linux/kthread.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/init.h>struct RCUStruct {int a;struct rcu_head rcu;
};static struct RCUStruct* Global_pointer;static struct task_struct* RCURDThread1, *RCURDThread2, *RCUWTThread;static int RCURDThreadFunc1(void* argc) {struct RCUStruct* pointer = NULL;while(1) {msleep(5);rcu_read_lock();mdelay(10);pointer = rcu_dereference(Global_pointer);if(pointer)printk("%s : read a = %d\n", __func__, pointer->a);rcu_read_unlock();}return 0;
}static int RCURDThreadFunc2(void* argc) {struct RCUStruct* pointer = NULL;while(1) {msleep(5);rcu_read_lock();mdelay(10);pointer = rcu_dereference(Global_pointer);if(pointer)printk("%s : read a = %d\n", __func__, pointer->a);rcu_read_unlock();}return 0;
}static void MyRCUDel(struct rcu_head* rcuh) {struct RCUStruct* p = container_of(rcuh, struct RCUStruct, rcu);printk("%s : a = %d\n", __func__, p->a);kfree(p);
}static int RCUWTThreadFunc(void* argc) {struct RCUStruct* old_pointer;struct RCUStruct* new_pointer;int value = (unsigned long)argc;while(1) {msleep(10);new_pointer = kmalloc(sizeof(struct RCUStruct), GFP_KERNEL);old_pointer = Global_pointer;*new_pointer = *old_pointer;new_pointer->a = value;rcu_assign_pointer(Global_pointer, new_pointer);call_rcu(&old_pointer->rcu, MyRCUDel);printk("%s : write to new %d\n", __func__, value);value++;}return 0;
}static int __init RCUFuncInit(void) {int value = 2;printk("Prompt:Successfully initialized the kernel module.\n");Global_pointer = kzalloc(sizeof(struct RCUStruct), GFP_KERNEL);RCURDThread1 = kthread_run(RCURDThreadFunc1, NULL, "RCURD1");RCURDThread2 = kthread_run(RCURDThreadFunc2, NULL, "RCURD2");RCUWTThread = kthread_run(RCUWTThreadFunc, (void*)(unsigned long)value, "RCUWT");return 0;
}static void __exit RCUFuncExit(void) {printk("Prompt:Successfully uninstalled kernel module!\n");kthread_stop(RCURDThread1);kthread_stop(RCURDThread2);kthread_stop(RCUWTThread);if(Global_pointer)kfree(Global_pointer);
}module_init(RCUFuncInit);
module_exit(RCUFuncExit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lenn louis");
  • Makefile
obj-m:=rcu.o	CURRENT_PAHT:=$(shell pwd) 
LINUX_KERNEL:=$(shell uname -r)   LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
all:make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PAHT) modulesclean:make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PAHT) cleals

运行结果

http://www.yayakq.cn/news/809925/

相关文章:

  • 外贸网站搭建公司做个小程序
  • 制作网页与网站前端网站开发课程
  • 如何设置网站icon智趣游戏型网站开发
  • 网站cms系统哪个好用网站快速排名是怎么做的
  • 接网站开发项目网站流程图设计
  • 建网站 几个链接支付网站开发怎么做账
  • 登录网站定制网站设计主要包括哪些步骤
  • 网站建设只有20%的利润软件工程培训机构
  • 女同性做的视频网站jsp网站建设 书籍
  • 俄文网站开发翻译站长友情链接
  • 网站开发需求 模板网站建设与维护管理办法
  • 如何做网站投放广告免签支付 wordpress
  • 建设手机网站例信息化建设办公室网站
  • 西安企业网站开发哪家好下拉框关键词软件
  • 付费网站搭建网站制作留钱
  • 深圳建设执业注册中心网站爱网图
  • 建教会网站的内容界面简洁的网站
  • 什么网站可以做海报简单大气的网站模板
  • 增城网站公司电话网页前端设计师培训学校
  • 网站开发找什么论文做网站如何用模板
  • 网站建设找实体还是淘宝网站建设的第一阶段
  • 网站搭建一般要多少钱广州越秀公司网站建设
  • 自己做网站能赚钱吗2018好的网站建设公司有哪些
  • 网站推广服务外包有哪些渠道可以做网站背景音乐的英文歌曲
  • 郑州市二七区建设局网站网站建设策划书1万字
  • 响应式视频网站模板下载淄博做网站建设
  • 车陂手机网站建设报价天元建设集团有限公司上班时间
  • 网站服务器作用电商网页设计论文
  • 图案设计网seo门户网站
  • 外贸婚纱网站html网页制作总结