Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3238028
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 17, 20262026-05-17T17:48:24+00:00 2026-05-17T17:48:24+00:00

I read that threads share the memory address space of it’s parent thread. If

  • 0

I read that threads share the memory address space of it’s parent thread.
If that is true , why can’t a thread function access a local variable belonging to it’s parent thread ?

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 thread shares the address space , then the function PrintVar should have been able to print the value of variable a , right ?

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

Threads in the same process share:
Process instructions
Most data
open files (descriptors)
signals and signal handlers
current working directory
User and group id

If that is true, then why does int a not qualify as a shared variable ?

I’d like to see an example code where the file descriptors are shared

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-17T17:48:25+00:00Added an answer on May 17, 2026 at 5:48 pm

    you couldn’t do that even if this were not a thread, because a is out of scope.

    put a in the global scope, like so:

    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 is actually not an issue of threads. consider the following code:

    void PrintVar(){
       printf( "%d\n", a);
    }
    
    int main(int argc, char*argv[]) {
       int a;
       a = 10;
       PrintVar();
    }
    

    This obviously won’t work, because the variable name a declared in main is not visible in PrintVar, because it’s in the local scope of another block. This is a compile-time problem, the compiler just doesn’t know what you mean by a when you mention it in PrintVar.

    But there is also another threading issue. when the main thread of a process exit, all other threads are terminated (specifically, when any thread calls _exit, then all threads are terminated, and _start calls _exit after main returns). but your main returns immediately after invoking the other thread. To prevent this, you should call pthread_join which will wait for a thread to exit before returning. that’ll look like this

    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);
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.