我正确使用结构吗?

时间:2016-11-30 20:31:17

标签: c struct pthreads

我正在学习C语言中的多线程。对于这项任务,我必须制作一个多线程康威的生命游戏。该程序在执行时接受一堆参数。以下是执行前所需的所有变量:

./gameoflife <width> <height> <seed> <p> <freq> <#worker_threads>

无论如何,为了使它成为多线程,我决定在#worker_threads之间垂直分割工作负载。因此每个工作线程都有自己的widthStart和widthEnd来处理。

以下是我的数据结构:

typedef struct {

    int width;
    int height;
    int ** board; 

    int freq;
    int nbThreads;

    int * escaped;

} masterStruct;

typedef struct {

    int widthStart; 
    int widthEnd;
    int threadID;
    masterStruct * master;    //this is supposed to be a pointer to the struct above.

}paramStruct;

现在我的“threader”线程(负责计算widthStart和widthEnd)将 masterStruct 作为参数。在其中,我调用了一堆pthread_creates,我将 paramsStruct 作为参数提供给他们。我希望所有这些新创建的pthread都能访问同一个全局masterStruct。所以在我的“线程”线程中,我声明了这样:

paramStruct p[workers]; //create as many paramStruct as nbThreads

for (int i = 0; i < workers; i++) {

    *(p[i].master) = myStr; //give each thread
...

我的问题是:这是确保所有pthread都可以访问同一masterStruct的正确方法吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我觉得这不对。 *(p[i].master) = myStr;myStr复制到某些(我认为无效的)内存中。也许你想这样:p[i].master = &myStr;