代码之家  ›  专栏  ›  技术社区  ›  user7195486

POSIX线程中的唯一值

  •  1
  • user7195486  · 技术社区  · 8 年前

    我试图向每个线程传递一个结构,并让每个线程打印出结构中的值,并显示每个线程的值是唯一的。

    我的问题是,每个线程都打印出相同的值,即使我在传入之前更改了值。

    const int NUM_THREADS = 2;
    
    struct number
    {
        int uniqueNumber;
    };
    
    void* showUniqueNumber(void* numberStruct);
    
    int main()
    {
        pthread_t threadID[NUM_THREADS];
    
        number* numberPtr = new number();
    
        for(int i=0; i < NUM_THREADS; i++)
        {
            numberPtr->uniqueNumber = i;
            pthread_create(&threadID[i], NULL, showUniqueNumber, (void*)numberPtr);
        }
    
        for(int i=0; i < 5; i++)
        {
            pthread_join(threadID[i], NULL);
        }
    
        return 0;
    }
    
    void* showUniqueNumber(void* numberStruct)
    {
        number* threadPtrN = (number*)numberStruct;
    
        cout << threadPtrN->uniqueNumber << endl;
    
        return (void*)0;
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Stargateur    8 年前

    因为它是同一个物体。您可以这样做:

    pthread_t threadID[NUM_THREADS];
    number numbers[NUM_THREADS];
    
    for(int i = 0; i < NUM_THREADS; i++)
    {
        numbers[i].uniqueNumber = i;
        pthread_create(&threadID[i], NULL, showUniqueNumber, numbers + i);
    }