2014-03-27 128 views
0

我试图编写多线程应用程序,它将通过结构共享一些参数。这里是代码的相关部分。C多线程应用程序结构

typedef struct { 
    .... 
    char xml_file[1024]; 
    .... 
} GeneratorData; 

在主线程(功能)

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

的问题是,在Generator__Init功能XML_FILE的,有时(多经常)含量不,我设置了进去。

函数Generator_ 初始化一切正常,直到连接 _Connect函数启动。这里会有什么问题?进入线程连接我没有从结构生成器获取变量。

感谢您的建议

+3

如果你的线程操纵结构,同步访问可能会导致奇怪的数据 – Taiki

回答

0

您的数据在踏步之间共享。所以如果一个人正在操纵数据,它正在改变另一个人看得见的东西。你将不得不更多地了解线程编程,特别是POSIX线程。

另外:

  • bzero被废弃了,因为很长,使用memset
  • ,如果你需要蒙上了你肯定做错了你的线程功能。这些应该是具有正确原型的函数指针,而不是数据指针。
  • 让您的程序在没有强制转换的情况下编译并打开所有警告级别。编译器是你的朋友。
+0

如果数据是共享的,我不确定。我将输入参数的字符串副本写入结构体中,不要在线程之间共享这些结构体(没有从生成器线程到连接结构体的任何指针,以其他方式相同)。 解决演员并没有解决我的问题。 – user2336793