为了理解更好的锁和信号量,我开始阅读有关内存障碍和用于获取和重新发送语义的内置函数,并且我在C中使用一个简单的多线程程序来测试它们,但编译器可以&找不到标题。
asm/system.h
已不存在,我发现barrier.h
必须改为使用,但在/usr/src/linux-headers-4.2.0.*/include
中没有asm
目录,我和#39;而是找到了asm-generic
,而且其中包含atomic.h
,atomic64.h
,barrier.h
,cmpxchg.h
以及其他有用的标题。
关键是asm-generic/atomic.h
尝试在asm
中包含自己的标题:
> cat "/usr/src/linux-headers-4.2.0-34/include/asm-generic/atomic.h"
#ifndef __ASM_GENERIC_ATOMIC_H
#define __ASM_GENERIC_ATOMIC_H
#include <asm/cmpxchg.h>
#include <asm/barrier.h>
#ifdef CONFIG_SMP
/* we can build all atomic primitives from cmpxchg */
#define ATOMIC_OP(op, c_op) \
static inline void atomic_##op(int i, atomic_t *v) \
{ \
int c, old; \
\
c = v->counter; \
while ((old = cmpxchg(&v->counter, c, c c_op i)) != c) \
c = old; \
}
...
... barrier.h
尝试包含gcc无法找到的linux/compiler.h
,即使compiler.h
实际上在/usr/src/linux-headers-4.2.0-34/include/linux
...
我不明白为什么以及如何使编译器(GCC)识别正确的路径,事实上如果我尝试#include <asm-generic/atomic.h>
它返回:
membarriers.c:9:32: fatal error: asm-generic/atomic.h: No such file or directory
compilation terminated.
我使用的是Ubuntu 15.10 x64,Kenel版本4.2.0-34。
建议?