c++ - POSIX 线程中的唯一值

标签 c++ linux multithreading posix

我正在尝试向每个线程传递一个结构,并让每个线程打印出该结构中的值,并表明它在每个线程中都是唯一的。

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

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

最佳答案

因为是同一个对象。你可以这样做:

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

关于c++ - POSIX 线程中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074811/

相关文章:

linux - Makefile patsubst 使用 shell 变量的值

c++ - runtime_error 未在此范围内为 g++ 4.1.2 声明

c++ - 当可移植性很重要时,使用 C++ 0x/TR1 是否安全?

linux - awk + ​​过滤日志文件

c++ - 如何在 Qt 中的 QTableView 中显示一个简单的 QMap?

c# - 如何并行化 Kinect AllFramesReady 事件

c++ - 向同一进程中的另一个线程发出信号

C 信号量和线程之间的 "barrier"

c++ - 'for each' 不是 std 的成员。已启用 C++11 支持

C++11 - 将非静态数据成员声明为 'auto'