原子操作atomic_t

参考资料:《正点原子Linux驱动开发指南》
 
原子操作是防止并发访问共享资源的方法之一
 
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");

 

 
posted @ 2024-03-24 23:37  lethe1203  阅读(17)  评论(0编辑  收藏  举报