参考资料:《正点原子Linux驱动开发指南》 volatile关键字可参考:https://www.cnblogs.com/lethe1203/p/18031883 原子操作是防止并发访问共享资源的方法之一 linux内核中对原子操作的定义:
#include <linux/types.h> typedef struct { volatile int counter; } atomic_t;原子操作就是用一个volatile对操作的变量进行限制,防止被编译器优化和被系统优化,表示操作是一个整体,不能再被细分 Linux内核提供的原子操作的函数如下: 在驱动中,如果一个变量可能会同时被多个进程或线程改值的话,就可以用原子操作,保证临界区访问的唯一性 测试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