2

2 つのファイルを作成しました。

tunables.h

#ifndef TUNABLES_H
#define TUNABLES_H

void tunables_load_conservative();
void tunables_load_aggressive();

extern int timer_x;
#endif /*TUNABLES_H */

および tunables.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 の 2 つの別個のプロセスがあるようです。extern宣言では、プロセス間で共有メモリを設定しませんが、代わりに、同じプロセス内の異なるコンパイル ユニットが同じ変数にアクセスできるようにします。

プロセス間で変数を共有するには、システム依存の IPC メソッドを使用する必要があります。

于 2009-11-08T09:53:04.993 に答える