线程更改的开始已经设置了全局变量

时间:2015-06-04 10:48:39

标签: c linux multithreading

我的代码遇到了非常奇怪的行为,代码的基本流程是

io_loop.start()解析文件并相应地设置全局变量,例如

main ()

现在,行后跟int frame_size, version; typedef struct//file parsing variables { int frame, int version; } configuration; ***//the function init_parse calls*** static int handler(void* user, const char* section, const char* name, const char* value) { configuration* pconfig = (configuration*)user; #define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0 if (MATCH("protocol", "version")) { pconfig->version = atoi(value); } else if (MATCH("basic", "frames")) { pconfig->frames= atoi(value); frame_size=pconfig->frames; } else { return 0; /* unknown section/name, error */ } return 1; } main (){ configuration config; if (ini_parse("test.ini", handler, &config) < 0) { printf("Can't load 'test.ini'\n"); getchar(); iret = pthread_create(&hThread,NULL, pcapreader, NULL); if(iret) { fprintf(stderr,"Error - pthread_create() return code: %d\n",iret); exit(EXIT_FAILURE); } } 的解析行,一切似乎都已设置,但是一旦线程启动,值frame_size就会变为6345720:/

我对可能的复制变量进行了双重检查。线程仅在for循环中使用main()来检查限制。

2 个答案:

答案 0 :(得分:1)

唯一的问题是初始化,一旦初始化,一切都像魅力一样:)

答案 1 :(得分:0)

我认为它可能永远不会初始化frame_size变量,也永远不会达到MATCH(“basic”,“frames”)语句。