【发布时间】:2011-11-15 00:10:51
【问题描述】:
我有一个 main.c,其中有一个名为 int countboards 的全局变量。在 main() 中,我启动了一个 pthread,它侦听 ONE TCP-Connection 并通过 (progserver.c) 运行它。意味着,该线程将永远不会返回。在 main() 中,我输入了 rm.c 中的函数 rmmain(...)(RM=Ressource Manager)。在 rm.c 中,我读取了 countboards,在 pthread 中的 progserver.c 中,我写入了这个变量(两者都可以通过 extern int countboards 访问)。
所以问题是,当我在 pthread 中写入 countboards 并且我想在它被写入 rm.c 之后访问这个变量时,它仍然具有旧值(在这种情况下是 0 而不是 for例 10)。为什么?
main.c:
int countboards;
int main(int argc, char** argv) {
countboards = 0;
pthread_t thread;
pthread_create(&thread, NULL, startProgramserver, NULL);
rmmain();
return 0;
}
rm.c:
extern int countboards;
int rmmain(vhbuser* vhbuserlist, int countvhbuser,
userio* useriolist, int countios, int usertorm, int rmtosslserver, int sslservertorm) {
while(1) {
int n;
n=read(usertorm,buf,bufc); // blocks until command comes from the user
...
board* b = findAFreeBoard(boardlist, countboards, usagelist); // here countboards should be >0, but it isn't
...
}
}
programserver.c:
extern int countboards;
void* startProgramserver(void*) {
...
sock = tcp_listen();
...
http_serve(ssl,s, sslpipes);
}
static int http_serve(SSL *ssl, int s, void* sslpipes) {
...
countboards = countboards + countboardscommands;
...
// here countboards has the new value
}
【问题讨论】:
标签: c linux pthreads global-variables posix