В настоящее время я изучаю многопоточность в C. Для этого задания я должен сделать многопоточную игру Жизни Конуэя. Программа выполняет кучу параметров при выполнении. Вот все переменная она принимает перед выполнением:Я правильно использую структуры?
./gameoflife <width> <height> <seed> <p> <freq> <#worker_threads>
Во всяком случае, для того, чтобы сделать его многопотоковый я решил разделить нагрузку по вертикали между #worker_threads. Поэтому каждый рабочий поток имеет собственную ширинуStart и 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 в качестве аргумента. Я хотел бы, чтобы все эти вновь созданные pthreads имели доступ к одному и тому же глобальному masterStruct. Так что в моем «Threader» нить, я объявил его как таковой:
paramStruct p[workers]; //create as many paramStruct as nbThreads
for (int i = 0; i < workers; i++) {
*(p[i].master) = myStr; //give each thread
...
Мой вопрос: Является ли это правильный путь, чтобы обеспечить все Pthreads имеют доступ к одной и той же masterStruct?
Любая помощь очень ценится.
Обратите внимание, что в C '* (p [i] .master)' равнозначно 'p [i] -> master'. – glauxosdever
@glauxosdever Я получаю сообщение об ошибке «error: invalid type of '->'», когда я пытаюсь это сделать. – user100000
Это потому, что они не эквивалентны. Ваше первоначальное использование в порядке. Если бы это было '(* p [i]), то мастер, затем изменивший значение на' p [i] -> master', имел бы смысл. Теперь это не так. – eran