variable scope in threads

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • chunghorng_lung@hotmail.com

    #1

    variable scope in threads

    Hi All,

    I have a question on the scope of variables for threads. The program
    has a main thread which creates a few worker threads. The main thread
    can access another class stored in another file, however, the worker
    threads can't. I got link errors for the code inside of the worker
    threads. The following contains code segments.

    Multi_Queue is a class and getXXX() is a public member function inside
    of Multi_Queue which is in another file.

    // inside of the main thread
    //global data
    static Multi_Queue *test1;
    .....

    int abc;
    abc = test1->getXXX(); // no link error
    ....

    // create worker threads
    for (i=0;i<numWorke r;i++)
    {
    x = pthread_create( &workers[i], NULL, &workerThrea d, NULL);
    ...
    }

    }

    // This is the worker thread
    void *workerThread(v oid *inPtr)
    {
    int xyz = test1->getXXX(); // link error on getXXX()

    }

    My question is why there is no link error in the main thread but in
    the worker thread it has. A global variable, in this case
    Multi_Queus, created in the main thread should be available in other
    threads. Appreciate any insights.

    Regards,
    Chung

  • Larry Smith

    #2
    Re: variable scope in threads

    chunghorng_lung @hotmail.com wrote:
    Hi All,
    >
    I have a question on the scope of variables for threads. The program
    has a main thread which creates a few worker threads. The main thread
    can access another class stored in another file, however, the worker
    threads can't. I got link errors for the code inside of the worker
    threads. The following contains code segments.
    >
    Multi_Queue is a class and getXXX() is a public member function inside
    of Multi_Queue which is in another file.
    >
    // inside of the main thread
    //global data
    static Multi_Queue *test1;
    ....
    >
    int abc;
    abc = test1->getXXX(); // no link error
    ...
    >
    // create worker threads
    for (i=0;i<numWorke r;i++)
    {
    x = pthread_create( &workers[i], NULL, &workerThrea d, NULL);
    ...
    }
    >
    }
    >
    // This is the worker thread
    void *workerThread(v oid *inPtr)
    {
    int xyz = test1->getXXX(); // link error on getXXX()
    >
    }
    >
    My question is why there is no link error in the main thread but in
    the worker thread it has. A global variable, in this case
    Multi_Queus, created in the main thread should be available in other
    threads. Appreciate any insights.
    >
    Regards,
    Chung
    >
    Only if all of the code (main thread & worker threads)
    is in ONE source file.

    You declared 'test1' as 'static', so it is NOT global;
    it's only visible within the source file where it
    is declared.

    One (of several) solutions might look like this:

    // in main.cpp
    Multi_Queue *test1;

    // in worker.cpp
    extern Multi_Queue *test1;

    When main.cpp & worker.cpp are compiled and then
    Linked together, code in 'worker.cpp' will have
    access to 'test1'.

    Comment

    Working...