вы не могли бы сделать это, даже если бы это не был поток, потому что a выходит за рамки.
поместите a в глобальную область, например, так:
int a;
void* PrintVar(void* arg){
printf( "%d\n", a);
}
int main(int argc, char*argv[]) {
a = 10;
pthread_t thr;
pthread_create( &thr, NULL, PrintVar, NULL );
}
Thisна самом деле это не вопрос потоков.рассмотрим следующий код:
void PrintVar(){
printf( "%d\n", a);
}
int main(int argc, char*argv[]) {
int a;
a = 10;
PrintVar();
}
Это, очевидно, не сработает, потому что имя переменной a
, объявленное в main
, не видно в PrintVar
, поскольку оно находится в локальной области видимости другого блока.,Это проблема времени компиляции, компилятор просто не знает, что вы подразумеваете под a
, когда упоминаете об этом в PrintVar
.
Но есть и другая проблема с многопоточностью.когда основной поток процесса завершается, все другие потоки завершаются (в частности, когда любой поток вызывает _exit
, тогда все потоки завершаются, а _start
вызывает _exit
после возврата main
).но ваш основной возвращается сразу после вызова другого потока.Чтобы предотвратить это, вы должны вызвать pthread_join
, который будет ждать завершения потока перед возвратом.это будет выглядеть так
int a;
void* PrintVar(void* arg){
printf( "%d\n", a);
}
int main(int argc, char*argv[]) {
void *dummy;
a = 10;
pthread_t thr;
pthread_create( &thr, NULL, PrintVar, NULL );
pthread_join( thr, &dummy);
}