原子操作atomic_t

lethe1203發表於2024-03-24
參考資料:《正點原子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");

相關文章