См. Мой псевдокод ниже. Комментарии кодов должны объяснить мою проблему. Я новичок в обоих pthreads и связанных списках на C, поэтому я немного вскочил в глубокий конец. Мне просто нужно напечатать значение str
в функции thread_work
. Последовательный бит кода хорош, но когда каждый поток выполняет свою работу, он не может распечатать значение str
.Правильно пересылает узел связанного списка в функцию pthread
// linked list definition
struct linked_list {
char *str;
struct linked_list *next;
};
// linked list initiation
struct linked_list *root;
struct linked_list *next_info;
root = malloc(sizeof(struct linked_list));
// main code
some loop {
next_node->str = str;
printf("%s\n", next_node); // PRINTS FINE
pthread_t thread;
rc = pthread_create(&thread, NULL, thread_work, (void *) &next_node);
next_node->next = malloc(sizeof(struct linked_list));
next_node = next_node->next;
}
// code executed by each thread
void *thread_work(void *thread_arg) {
struct linked_list *ll;
ll = (struct linked_list *)thread_arg;
printf("%s\n", ll->str); // PRINTS SOME MESS (��E#)
}
В моем фактическом коде есть несколько членов linked_list
struct
.
Большое спасибо.
Только примечание: так как '' thread_arg' является недействительным * ', нет абсолютно никакой необходимости, чтобы бросить при переходе на другой тип указателя данных. Просто сделайте это: 'struct linked_list * ll = thread_arg;" '. – unwind