gpt4 book ai didi

C 多线程应用程序结构

转载 作者:行者123 更新时间:2023-11-30 17:36:24 25 4
gpt4 key购买 nike

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

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_Init 中一切正常,直到 Connection_Connect 函数启动。这里会出现什么问题呢?在线程连接中,我没有从结构生成器获取变量。

谢谢你的建议

最佳答案

您的数据在各个步骤之间共享。因此,如果一个人正在操纵数据,那么它就会改变另一个人可见的内容。您必须了解有关线程编程的更多信息,特别是 POSIX 线程。

另外:

  • bzero 已弃用很久,请使用 memset
  • 如果您需要对线程函数进行强制转换,那么您肯定做错了什么。这些应该是具有正确原型(prototype)的函数指针,而不是数据指针。
  • 让您的程序在不进行强制转换的情况下进行编译,并打开所有警告级别。编译器是你的 friend 。

关于C 多线程应用程序结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com