在循环中将多个变量传递给pthread;参数在下一次迭代时被覆盖

时间:2013-10-15 03:47:06

标签: c multithreading struct global-variables

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

然后在线程调度功能中有

/*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:将结构移动到全局变量部分。这似乎有效但我知道应该避免全局变量。我也不明白为什么会这样?

0 个答案:

没有答案