How a thread function can access parent thread variables

I read that threads share the memory address space of this parent thread. If so, why can't the stream function access the local variable belonging to it by the parent stream?

void* PrintVar(void* arg){
   printf( "%d\n", a);
}

int main(int argc, char*argv[]) {
   int a;
   a = 10;
   pthread_t thr;
   pthread_create( &thr, NULL, PrintVar, NULL );

}

If the stream shares the address space, then the PrintVar function would have to print the value variable a, right?

I read this piece of information http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Topics of the same process resource: Process instructions Most data open files (descriptors) signals and signal handlers current working directory User and group identifier

, int a ?

,

+5
2

, , .

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 );

}

. :

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);
}
+4

, . , :

void* PrintVar(void* arg){
   int * a = (int *) arg;
   printf( "%d\n", *a);
}

int main(int argc, char*argv[]) {
   int a;
   a = 10;
   pthread_t thr;
   pthread_create( &thr, NULL, PrintVar, &a );
}

, , ( ) , (a) , . ( , , pthread_join() main(), main() )

+6

All Articles