首页 > 其他分享 >原子操作atomic_t

原子操作atomic_t

时间:2024-03-24 23:44:45浏览次数:31  
标签:demo counter 原子 atomic 操作 include

参考资料:《正点原子Linux驱动开发指南》   volatile关键字可参考:https://www.cnblogs.com/lethe1203/p/18031883 原子操作是防止并发访问共享资源的方法之一   linux内核中对原子操作的定义:

#include <linux/types.h>

typedef struct {
    volatile int counter;
} atomic_t;
原子操作就是用一个volatile对操作的变量进行限制,防止被编译器优化和被系统优化,表示操作是一个整体,不能再被细分   Linux内核提供的原子操作的函数如下: 0   在驱动中,如果一个变量可能会同时被多个进程或线程改值的话,就可以用原子操作,保证临界区访问的唯一性   测试demo:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/timer.h>

static atomic_t counter = ATOMIC_INIT(0);

static int __init atomic_demo_init(void)
{
    printk(KERN_INFO "Initializing atomic demo module\n");

    // 原子递增操作
    atomic_inc(&counter);
    printk(KERN_INFO "Counter after atomic_inc: %d\n", atomic_read(&counter));

    // 原子递减操作
    atomic_dec(&counter);
    printk(KERN_INFO "Counter after atomic_dec: %d\n", atomic_read(&counter));

    return 0;
}

static void __exit atomic_demo_exit(void)
{
    printk(KERN_INFO "Exiting atomic demo module\n");
}

module_init(atomic_demo_init);
module_exit(atomic_demo_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("lethe1203");
MODULE_DESCRIPTION("atomic operations");

 

 

标签:demo,counter,原子,atomic,操作,include
From: https://www.cnblogs.com/lethe1203/p/18093378

相关文章

  • 什么是Linux?它与其他操作系统有何区别?
    什么是Linux?它与其他操作系统有何区别?什么是Linux?它与其他操作系统有何区别?摘要引言正文内容了解LinuxLinux与其他操作系统的区别开放性多样性安全性......
  • 代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离
    583. 两个字符串的删除操作 这道题的状态方程比上一题简单一些初始化如下classSolution{public:intminDistance(stringword1,stringword2){vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1));for(inti=0;i......
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
    SQL(结构化查询语言)作为一种强大的数据库查询和操作工具,它能够完成从简单查询到复杂数据操作的各种任务。在这篇文章中,我们主要讨论如何在SQL中添加(插入)数据,以及在数据操作过程中,会产生哪些类型的数据。文章目录如何在SQL中添加数据更新和删除数据更新数据删除数据......
  • 在域环境下对账户的操作
    1.安装windowsserver2022、Windows10X64的操作环境,这文是在msdn下载的2.修改两机的IP与关闭防火墙,下面我们用2022的192.168.7.128,ping2010的192.168.7.129,显然两机间是能相互通讯的3.在2022上安装ActiveDirectory域服务4.修改2022的计算机名为ruantianyou2022并重启虚拟......
  • AI每日一问:世界的本源是什么?是原子的吗?无限可分的吗?是物质的还是想象的? 我们应当怎样
    1.世界的本源是什么?是原子的吗?无限可分的吗?是物质的还是想象的?我们应当怎样看待物质世界?以及怎么快速促进强人工智能的到来?Claude-3-Opus这些都是非常深奥而有趣的哲学问题,需要我们深入探讨和思考。关于世界本源的问题,不同的哲学流派有不同的看法。原子论认为物质世界......
  • 在linux中无需修改内核驱动就能操作GPIO口的示例
    一、首先编写一个脚本文件init.sh#!/bin/bashecho2>/sys/class/gpio/exportsleep1echo3>/sys/class/gpio/exportsleep1echoout>/sys/class/gpio/gpio3/directionecho1>/sys/class/gpio/gpio3/value这段代码是在Linux系统中使用shell脚本语言编写的。让......
  • net core API 后台系统操作日志的实现思路
    netcoreAPI后台系统操作日志的实现思路系统操作日志的实现思路主要问题不在于写日志和表结构设计上。主要问题在识别出哪些数据做了修改。并生成日志。表中数据列众多,且要监控多个表。如果要监控的每个表都去写代码去监控和转换这样的工作量就会比较大。如,用户表【Name,......
  • JDBC操作数据库
    packagecom.demo;importjava.sql.*;publicclassDemo{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{//1、加载驱动Class.forName("com.mysql.jdbc.Driver");//2、创建连接(DriverManager驱......
  • Three.js 中的 OrbitControls 是一个用于控制相机围绕目标旋转以及缩放、平移等操作的
    demo案例Three.js中的OrbitControls是一个用于控制相机围绕目标旋转以及缩放、平移等操作的控制器。下面是它的详细讲解:构造函数:OrbitControls(object:Camera,domElement?:HTMLElement)object:THREE.Camera实例,控制器将围绕此对象进行操作,例如相机。domElement......
  • selenium(6)窗口,弹窗,以及iframe的操作
    1.current_window_handle  :可以获取当前窗口的句柄2.window_handles:可以获取所有窗口的句柄3.switch_to.window(handle): 可以切换到指定的窗口,其中handle是窗口的句柄。4.close() :关闭当前窗口。5.switch_to.alert():切换到浏览器弹出框同时可以使用driver.switch_to.al......