c - 线程变化的开始已经设置了全局变量

标签 c linux multithreading

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

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);
    }

        }

现在,main() 的解析行之后的行,一切似乎都已设置,但是一旦线程启动,值 frame_size 就会变为 6345720:/

我已经为可能的复制变量仔细检查了代码。线程仅在 for 循环中使用 frame_size 来检查限制。

最佳答案

唯一的问题是初始化,一旦初始化,一切都很顺利:)

关于c - 线程变化的开始已经设置了全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641827/

相关文章:

c - 如何在另一个模块加载之前加载一个模块?

c - 如何在C中的引号之间找到子字符串

java - JVM 堆大小是否强制或如何影响子进程?

.net - 多线程->多处理趋势

java - 线程运行时未实现计数器值

c - C中的内存保护

C - Pthreads 的双重释放错误

linux - 在 12.04 上安装 gcc4.7 时,GCC 不会从 4.6 切换到 4.7

Linux 上的 Python 内存消耗 : physical and virtual memory are growing while the heap size remains the same

Java在内存中数据存储线程安全