内核同步相关知识详解
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. 内核同步的其他方面
在学习内核同步的过程中,我们还了解到以下内容:
- 整数锁定 :
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



