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
- 如果您的线程函数需要强制转换,那么您肯定是做错了什么。这些应该是具有正确原型的函数指针,而不是数据指针
- 让你的程序在没有强制转换的情况下编译,并打开所有警告级别。编译器是你的朋友
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);