62、内核同步相关知识详解

内核同步相关知识详解

1. READ_ONCE() 和 WRITE_ONCE() 宏的使用

使用 READ_ONCE() WRITE_ONCE() 宏对单个变量进行操作时,能绝对保证编译器和 CPU 按预期执行。它会按要求阻止编译器优化,按需使用内存屏障,并在不同核心上的多个线程同时访问该变量时保证缓存一致性。详细信息可参考内核文档中关于内存屏障的部分(https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt),其中有“WHERE ARE MEMORY BARRIERS NEEDED?”的详细章节。对于驱动开发者而言,通常在设置 DMA 描述符或发起和结束 CPU 与外设的通信等操作时才需要使用内存屏障。

2. volatile 关键字的作用

使用 volatile 关键字并不能神奇地消除并发问题。它只是指示编译器不对该变量进行常见的优化(因为代码路径外的其他因素可能会修改被标记为 volatile 的变量)。在处理内存映射 I/O(MMIO)时,这一关键字通常是必要且有用的。有趣的是,编译器不会对标记为 volatile 的变量与其他 volatile 变量的读写操作进行重排序,但 volatile 关键字并不能保证原子性。

3. 内核同步的其他方面

在学习内核同步的过程中,我们还了解到以下内容:
- 整数锁定

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值