Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C多线程应用程序结构_C_Multithreading_Struct - Fatal编程技术网

C多线程应用程序结构

C多线程应用程序结构,c,multithreading,struct,C,Multithreading,Struct,我正在尝试编写多线程应用程序,它将通过结构共享一些参数。下面是代码的相关部分 typedef struct { .... char xml_file[1024]; .... } GeneratorData; 主线程中(函数) GeneratorData generator\u数据; 连接数据连接数据; bzero(连接数据和sizeof(连接数据)); bzero(&generator_数据,sizeof(generator_数据)); strcpy(generator

我正在尝试编写多线程应用程序,它将通过结构共享一些参数。下面是代码的相关部分

typedef struct {
    ....
    char xml_file[1024];
    ....
} GeneratorData;
主线程中(函数)

GeneratorData generator\u数据;
连接数据连接数据;
bzero(连接数据和sizeof(连接数据));
bzero(&generator_数据,sizeof(generator_数据));
strcpy(generator_data->xml_文件,argv[1]);
strcpy(连接->xml_文件,argv[1]);
if(pthread_create(&generate,NULL,(void*)Generator_uinit,(void*)和Generator_data)<0){
返回-1;
}
if(pthread_create(&connection,NULL,(void*)connection_Connect,(void*)connection_data)<0){
返回-1;
}
pthread_join(generate,NULL);
问题是,有时候(通常)Generator_uinit函数中xml_文件的内容不是我在其中设置的内容

在函数生成器中,在连接函数启动之前,初始化是一切正常的。这里有什么问题?在线程连接中,我没有从结构生成器中获取变量


感谢您的建议

您的数据将在踏板之间共享。因此,如果一方在操作数据,它就改变了另一方的可见内容。您必须了解更多关于线程编程的知识,尤其是POSIX线程

此外:

  • bzero
    长期以来被弃用,请使用
    memset
  • 如果您的线程函数需要强制转换,那么您肯定是做错了什么。这些应该是具有正确原型的函数指针,而不是数据指针
  • 让你的程序在没有强制转换的情况下编译,并打开所有警告级别。编译器是你的朋友

如果线程操纵结构,同步访问可能会导致奇怪的数据我不确定数据是否共享。我将输入参数的字符串副本复制到struct中,并且不在线程之间共享这些结构(从生成器线程到连接结构之间没有任何指针,另一方面也是如此)。解决铸件问题并不能解决我的问题。
GeneratorData generator_data;
ConnectionData connection_data;

bzero(&connection_data, sizeof(connection_data));
bzero(&generator_data, sizeof(generator_data));

strcpy(generator_data->xml_file, argv[1]);
strcpy(connection->xml_file, argv[1]);

if(pthread_create(&generate, NULL, (void*)Generator__Init, (void *)&generator_data) < 0){
      return -1;
}

if(pthread_create(&connection, NULL, (void*)Connection__Connect, (void *)&connection_data) < 0){
      return -1;
}
pthread_join(generate, NULL);