在C

时间:2015-04-29 10:27:41

标签: c multithreading pthreads

我有很多函数(length>4000)行。在这个函数中,我在开头声明了100多个变量。现在,我想在不同的线程中运行一个特定的行块。例如,我想在不同的线程中运行行2000-3000。我该怎么做?

要缩小示例,我就是这样:

int functionA()
{
    .....variables declared......
    .....variables declared......
    printf("hello");
    printf("this");
    printf("is in another");
    printf("thread");
}

我想在另一个线程中运行4个printf函数。

要做到这一点,这就是我目前所做的事情:

int functionA()
{
    .....variables declared......
    .....variables declared......
    void functionB()
    {
       printf("hello");
       printf("this");
       printf("is in another");
       printf("thread");
    }
    pthread_create(&tid, NULL, functionB, NULL);
    pthread_join(tid, NULL);
}

我知道这是一种可怕的方法。但是,如果我想让functionB成为一个新的独立函数,则传递的变量太多了。

请告诉我如何继续。

1 个答案:

答案 0 :(得分:4)

我要做的是:创建一个包含所有需要变量的结构。然后使用指向该结构的指针创建一个新函数作为参数。然后,您可以使用该函数创建一个新线程,您只需要传递该结构。结构创建也会非常快速地编码,你只需要输入

struct nameforstruct {
    //declare vars here, e.g.:
    int somevar;
}

围绕它并通过copy-pasting structname->更改对变量的访问权限;在它面前。

功能可能如下所示:

void threadingStuff(struct nametostruct * myvars) {
    if (myvars->somevar == 1) {
        // do stuff
    }
}

在我看来,这是实现你想要的最快方式(以及最简单的工作方式)。但我真的会考虑将其重构为一些更好的方法......