2

我创建了两个文件:

可调参数.h

#ifndef TUNABLES_H
#define TUNABLES_H

void tunables_load_conservative();
void tunables_load_aggressive();

extern int timer_x;
#endif /*TUNABLES_H */

和可调参数.c

#include "tunables.h"

int timer_x;

void tunables_load_conservative(){
     timer_x = 3;
}
void tunables_load_aggressive(){
     timer_x = 1;
}

我项目的所有其他文件都包括“ tunables.h ”。当我加载项目时,Ac 和 Bc 都调用tunables_load_conservative但如果过了一会儿,我在文件 Bc 中调用文件 Ac tunables_load_aggressive() , timer_x仍然为 3。为什么?

这是我的 Makefile:

INCLUDE=`pwd`/include
GCCFLAGS= -ansi -O3 -pedantic -Wall -Wunused -I${INCLUDE} -DDEBUG 
GCCOTHERFLAGS= -ggdb -pg

all: A B

A: A.o tunables.o
    gcc -o A ${GCCFLAGS} ${GCCOTHERFLAGS} tunables.o

B: B.o tunables.o
    gcc -o LBfixed ${GCCFLAGS} ${GCCOTHERFLAGS} tunables.o

A.o: A.c
    gcc -c ${GCCFLAGS} ${GCCOTHERFLAGS} A.c

B.o: B.c
    gcc -c ${GCCFLAGS} ${GCCOTHERFLAGS} B.c

tunables.o: tunables.c
    gcc -c ${GCCFLAGS} ${GCCOTHERFLAGS} tunables.c

clean:
    rm -rf *.o A B
4

1 回答 1

4

看起来你有两个独立的进程,A 和 B。extern声明没有跨进程设置共享内存,而是允许同一进程中的不同编译单元访问同一个变量。

要跨进程共享变量,您将需要使用系统相关的 IPC 方法。

于 2009-11-08T09:53:04.993 回答