内存障碍 - linux头文件的问题

时间:2016-03-16 05:12:22

标签: c linux multithreading linux-kernel header-files

为了理解更好的锁和信号量,我开始阅读有关内存障碍和用于获取和重新发送语义的内置函数,并且我在C中使用一个简单的多线程程序来测试它们,但编译器可以&找不到标题。

asm/system.h已不存在,我发现barrier.h必须改为使用,但在/usr/src/linux-headers-4.2.0.*/include中没有asm目录,我和#39;而是找到了asm-generic,而且其中包含atomic.hatomic64.hbarrier.hcmpxchg.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。

建议?

0 个答案:

没有答案