Linux基础 - Linux ARM 原子读写

背景

在Linux Arm kernel实现原子读写64位数据;

接口代码

#include <linux/atomic.h>
atomic64_t my_atomic_var = ATOMIC64_INIT(0);

void atomic_write_64(atomic64_t *v, int64_t new_value) {
   
    atomic64_set(v, new_value);
}

int64_t atomic_read_64(atomic64_t *v) {
   
    return atomic64_read(v);
}

使用自旋锁

#include <linux/spinlock.h>

spinlock_t my_lock = SPIN_LOCK_UNLOCKED;
uint64_t my_shared_var = 0;

void write_64(uint64_t new_value) {
   
    spin_lock(&my_lock);
    my_shared_var = new_value;
    spin_unlock(&my_lock);
}

uint64_t read_64(void) {
   
    uint64_t value;
    spin_lock(&my_lock);
    value = my_shared_var;
    spin_unlock(&my_lock);
    return value;
}

使用读写锁

#include <linux/rwlock.h>

rwlock_t my_rwlock = RW_LOCK_UNLOCKED;
uint64_t my_shared_var = 0;

void write_64(uint64_t new_value) {
   
    write_lock(&my_rwlock);
    my_shared_var = new_value;
    write_unlock(&my_rwlock);
}

uint64_t read_64(void) {
   
    uint64_t value;
    read_lock(&my_rwlock);
    value = my_shared_var;
    read_unlock(&my_rwlock);
    return value;
}

相关推荐

  1. Linux基础 - Linux ARM 原子

    2023-12-23 07:36:05       54 阅读
  2. 基础Python教程之sqlite

    2023-12-23 07:36:05       67 阅读
  3. Linux 测试磁盘速度

    2023-12-23 07:36:05       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 07:36:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 07:36:05       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 07:36:05       87 阅读
  4. Python语言-面向对象

    2023-12-23 07:36:05       96 阅读

热门阅读

  1. [node] Node.js的全局对象Global

    2023-12-23 07:36:05       48 阅读
  2. ip addr和ifconfig区别

    2023-12-23 07:36:05       62 阅读
  3. vue3 H5项目中实现PDF预览

    2023-12-23 07:36:05       57 阅读
  4. 面试经典150题(42-44)

    2023-12-23 07:36:05       55 阅读
  5. Vue中转换HTML为PDF

    2023-12-23 07:36:05       59 阅读
  6. NPM介绍与使用

    2023-12-23 07:36:05       56 阅读
  7. SRE 与 DevOps 的不同之处

    2023-12-23 07:36:05       59 阅读
  8. Google 提示:切忌滥用 DORA 指标

    2023-12-23 07:36:05       48 阅读
  9. 力扣labuladong——一刷day77

    2023-12-23 07:36:05       50 阅读
  10. 【Kafka-Eagle】EFAK告警配置与实践

    2023-12-23 07:36:05       57 阅读