#include <pthread.h>
#define NUM_THREADS 10
void *work(void *i){
int f = *((int *)(i));
printf("Hello, world from %i with value %i\n",
pthread_self(), f);
pthread_exit(NULL);
}
int main(int argc, char **argv){
int i;
pthread_t id[NUM_THREADS];
for(i = 0; i < NUM_THREADS; ++i){
if(pthread_create(&id[i], NULL, work, (void *)(&i))){
printf("Error creating the thread\n"); exit(19);}
}
return 0;
}
выход должен быть:
Hello, world from 2 with value 1
Hello, world from 3 with value 2
Hello, world from 6 with value 5
Hello, world from 5 with value 5
Hello, world from 4 with value 4
Hello, world from 8 with value 9
Hello, world from 9 with value 9
Hello, world from 10 with value 9
Hello, world from 7 with value 6
Hello, world from 11 with value 10
это опять не домашняя работа. это некоторый код, с которым я сталкиваюсь в какой-то ссылке, но posix не является моей областью, поэтому я просто хочу то, что достаточно, чтобы понять это
мои вопросы:
- что это значит int f = * ((int *) (i)); ??? я имею в виду указатели, написанные как эти, я не могу их понять
- что это значит (void *) (& i))
- pthread_create возвращает нулевое или ненулевое значение в случае успеха?
в выводе давайте возьмем первую строку, например, как получается значение 1 !! не должно ли быть ноль, так как я ноль
- влияет ли ++ на этот вывод?