0

我遇到了线程产生垃圾的问题,我想我找到了问题,我希望有人能证实或反驳我的怀疑并推荐最佳解决方案。

然后在线程调度函数中有

/*global variables*/
struct passArgs
{
    int length;
    char match;
    char** data;
};

在线程调度函数...

struct passArgs args;
pthread_t thrd[ALPHA_LENGTH];
    args.data = data;
    args.length = tt;
    for(int i = 0; i < ALPHA_LENGTH; i++)
    {
        args.match = (char)(i+65);
    pthread_create(&thrd[i], NULL, &processData, &args))
    }

这不起作用,因为processData()当结构体将参数传递到局部变量中时,它们已被 for 循环的下一次迭代覆盖。

解决方案 1:创建一个结构数组。

struct passArgs args[ALPHA_LENGTH];
for(int i = 0; i < ALPHA_LENGTH; i++)
{
    args[i].data = data;
    args[i].length = tt;
    args[i].match = (char)(i+65);
}

在函数中,processData()这产生了编译错误“取消引用指向不完整类型的指针”。

processData 从结构中创建局部变量,如下所示

struct passArgs *myArgs = (struct passArgs *)ptrToArgs;
char** words = (*myArgs).data;
const int length = (*myArgs).length;
const char responsibleFor = (*myArgs).match;

解决方案2:将结构移动到全局变量部分。这似乎有效,但我知道应该避免使用全局变量。我也不明白为什么这有效?

4

0 回答 0