我正在学习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的正确方法吗?
非常感谢任何帮助。
答案 0 :(得分:1)
我觉得这不对。 *(p[i].master) = myStr;
将myStr
复制到某些(我认为无效的)内存中。也许你想这样:p[i].master = &myStr;
。