我正在尝试向每个线程传递一个结构,并让每个线程打印出该结构中的值,并表明它在每个线程中都是唯一的。
我的问题是每个线程都打印出相同的值,即使我在传入之前更改了值。
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/