Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix some typos #60

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Documentation/zh_CN/volatile-considered-harmful.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ C程序员通常认为volatile表示某个变量可以在当前执行的线程
do_something_else_with(&shared_data);
spin_unlock(&the_lock);

如果所有的代码都遵循加锁规则,当持有the_lock的时候,不可能意外的改变shared_data的
如果所有的代码都遵循加锁规则,当持有the_lock的时候,不可能意外地改变shared_data的
值。任何可能访问该数据的其他代码都会在这个锁上等待。自旋锁原语跟内存屏障一样—— 它
们显式的用来书写成这样 —— 意味着数据访问不会跨越它们而被优化。所以本来编译器认为
它知道在shared_data里面将有什么,但是因为spin_lock()调用跟内存屏障一样,会强制编
Expand Down Expand Up @@ -76,19 +76,19 @@ cpu_relax()调用会降低CPU的能量消耗或者让位于超线程双处理器

在内核中,一些稀少的情况下volatile仍然是有意义的:

- 在一些体系架构的系统上,允许直接的I/0内存访问,那么前面提到的访问函数可以使用
- 在一些体系架构的系统上,允许直接的I/O内存访问,那么前面提到的访问函数可以使用
volatile。基本上,每一个访问函数调用它自己都是一个小的临界区域并且保证了按照
程序员期望的那样发生访问操作。

- 某些会改变内存的内联汇编代码虽然没有什么其他明显的附作用,但是有被GCC删除的可
- 某些会改变内存的内联汇编代码虽然没有什么其他明显的副作用,但是有被GCC删除的可
能性。在汇编声明中加上volatile关键字可以防止这种删除操作。

- Jiffies变量是一种特殊情况,虽然每次引用它的时候都可以有不同的值,但读jiffies
变量时不需要任何特殊的加锁保护。所以jiffies变量可以使用volatile,但是不赞成
其他跟jiffies相同类型变量使用volatile。Jiffies被认为是一种“愚蠢的遗留物"
(Linus的话)因为解决这个问题比保持现状要麻烦的多。

- 由于某些I/0设备可能会修改连续一致的内存,所以有时,指向连续一致内存的数据结构
- 由于某些I/O设备可能会修改连续一致的内存,所以有时,指向连续一致内存的数据结构
的指针需要正确的使用volatile。网络适配器使用的环状缓存区正是这类情形的一个例
子,其中适配器用改变指针来表示哪些描述符已经处理过了。

Expand Down