Я хочу написать многопоточную программу на языке c. Я использую библиотеку потоков posix.
Я пишу следующий код:
#include<stdio.h>
#include<pthread.h>
void *put (int *arg)
{
int i;
//int * p;
// p=(int*)arg;
for(i=0;i<5;i++)
{
printf("\n%d",arg[i]);
}
pthread_exit(NULL);
}
int main()
{
int a[5]={10,20,30,40,50};
pthread_t s;
pthread_create(&s,NULL,put,a);
printf("what is this\n");
return 0;
}
Я просто хочу, чтобы моя ветка просто показывала элементы в массиве. Программа составлена со следующим предупреждением:
tm.c:19: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type
/usr/include/pthread.h:227: note: expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(int *)’
Когда я запускаю программу, я получаю выход основного потока, но не значение, сохраненное в массиве.
Теперь кто-нибудь может сказать мне, что я делаю не так?
Как отправить массив в качестве аргумента в функции потока?
Если я просто немного изменил код, предупреждение о времени компиляции разрешило измененный код:
#include<stdio.h>
#include<pthread.h>
void *put (void *arg)
{
int i;
int * p;
p=(int*)arg;
for(i=0;i<5;i++)
{
printf("\n%d",p[i]);
}
pthread_exit(NULL);
}
int main()
{
int a[5]={10,20,30,40,50};
pthread_t s;
pthread_create(&s,NULL,put,a);
printf("what is this\n");
return 0;
}
Но вывод не меняется. Кто-нибудь может сказать мне, что я сделал не так? Как правильно отправлять массив в функцию потока (в этом случае)?