![]() |
1
43
您引用的第一个定义是
kernel lock validator
,又名“lockdep”。
相关定义为 here ,一句非常简短的评论说明了它们的目的:
但这些话是什么意思? 问题问题实际上是复数的:
for(;;) { owner = lock->owner; if (owner && !mutex_spin_on_owner(lock, owner)) break; /* ... */ }
解决方案我们首先注意到Linux内核需要用GCC构建。因此,解决方案只需要一个编译器,我们可以使用它 documentation 作为唯一的指南。 对于通用解决方案,我们需要处理各种大小的内存访问。我们有各种类型的特定宽度,以及其他一切。我们还注意到,我们不需要专门标记已经在关键部分中的内存访问( 为什么不呢? ).
对于1、2、4和8字节的大小,有适当的类型,以及
这就是在内核中为8位宽类型实现易失性(写入)访问的方式: *(volatile __u8_alias_t *) p = *(__u8_alias_t *) res;
假设我们不知道
确切地
什么
我希望我已经涵盖了一个概述,而没有深入研究C标准的解释,但如果你愿意,我可以花点时间来做。 |
![]() |
Imad Hamaidi · 如何使预处理器宏在编译之前对代码求值 2 年前 |
![]() |
Lightsout · 用于填充表的sql连接压缩行 2 年前 |
![]() |
Rogue258 · 在DB2SQL中使用存储过程/宏进行声明和循环 2 年前 |
![]() |
allthem · 将VBA设置为仅在第一次打开电子表格时自动运行 2 年前 |
![]() |
user306080 · 下面的宏在做什么? 2 年前 |
![]() |
Xev · 运行时错误91:对象变量或未设置块 2 年前 |
![]() |
digital illusion · 请参阅宏扩展中的外部板条箱 2 年前 |
![]() |
Aleph · 标识符在C预处理器指令中的作用是什么 3 年前 |
![]() |
Gakuo · 使用lisp循环宏进行高级循环 6 年前 |