Я пытаюсь сделать тривиальную программу, у меня есть ввод из командной строки n int elemnts; после того, как я сделаю n потоков с аргументом числом в позиции i; после этого функция * напечатает номер i, помещенный в pthread_create.Создание темы внутри цикла
int main (int argc, char *argv[]){
pthread_t * tid;
int i=0;
int n;
int *pn = &n;
tid = (pthread_t *) malloc (sizeof(pthread_t)*(argc-1));
for (i=1; i<argc; i++) { //cycle 1
*pn = atoi(argv[i]);
pthread_create(tid+i, NULL, function, (void *) pn);
}
for (i=0; i<argc-1; i++){
pthread_join(tid[i], NULL);
}
return 0;}
void *function(void * param){
int *k = (int *) param;
printf("i got this number: %d\n", *k);
pthread_exit(0);
}
я бегу и я получаю это:
./test 1 2 3 4
i got this number: 3
i got this number: 3
i got this number: 4
i got this number: 4
изменение выходной всегда, но я никогда не получить правильные числа (4, 1, 2, 3) не только в таком порядке, я знаю, что я не могу получить правильный порядок (для этого я ставлю соединение внутри цикла 1). Есть ли способ решить эту проблему?
Стандартное предупреждение: не отбрасывают '' недействительным *, возвращаемый 'malloc' и друзей. – Olaf
Что делать, если аргументы не передаются? Всегда проверяйте результат 'malloc' – Olaf