Linux kernel 在linux内核中写一次,读一次

Linux kernel 在linux内核中写一次,读一次,linux-kernel,lock-free,Linux Kernel,Lock Free,有人能解释一下写一次和读一次的用法吗 内部WRITE_ONCE使用可变限定符。为什么? WRITE\u ONCE和READ\u ONCE如何解决缓存一致性问题 *(volatile uu8\u alias\u t*)p和(volatile uuu8\u alias\u t*)p之间的区别?我建议阅读。它还包含使用此类宏的示例。这些宏实际上只是编译器的屏障,所以它们与“缓存一致性”无关。表达式之间的差异是一种类型的p和结果。这与问题的另一部分完全无关。(更喜欢在问题帖中问一个问题)。这是关于一致性

有人能解释一下
写一次
读一次
的用法吗

内部
WRITE_ONCE
使用可变限定符。为什么?

WRITE\u ONCE
READ\u ONCE
如何解决缓存一致性问题


*(volatile uu8\u alias\u t*)p和(volatile uuu8\u alias\u t*)p之间的区别?

我建议阅读。它还包含使用此类宏的示例。这些宏实际上只是编译器的屏障,所以它们与“缓存一致性”无关。表达式之间的差异是一种类型的
p
和结果。这与问题的另一部分完全无关。(更喜欢在问题帖中问一个问题)。这是关于一致性的。最后一个问题显然是关于指针指向数据与给定指针指向数据本身的关系。@Tsyvarev关于缓存一致性的问题来自memory barriers.txt。@MichaelFoukarakis:您可能是指短语“READ_ONCE()和WRITE_ONCE()为从多个CPU访问单个变量提供缓存一致性。”。不确定这个短语的实际含义,执行
READ\u ONCE
使用
smp\u READ\u barrier\u dependens()
,它仅在Alpha上是非空的。
WRITE_ONCE
的实现根本不使用CPU屏障。@Tsyvarev…..如果访问的数据类型的大小超过机器的“字大小”(例如32位或64位),READ_ONCE()和WRITE_ONCE()将返回memcpy并打印编译时警告。memcpy缠绕在屏障上。