我正在尝试将向量作为数据发送到pthread。但是当我尝试打印线程id时,它的即将到来的垃圾值。
如果我使用单线程运行此代码,则可以正常工作。但是当我用2个线程运行它时,它不起作用。
#include <iostream>
#include <pthread.h>
#include <vector>
using namespace std;
struct val {
int data;
int sData;
};
void *foo(void *a)
{
vector <val>* b = (vector <val>*)a;
for (val it : *b) {
std::cout <<" thread " <<it.data;
std::cout <<" &&& " <<it.sData<<"-----------"<<endl;
}
}
int main()
{
pthread_t thr[2];
for (int j = 0; j < 2; j++) {
std::vector <val> *a = new std::vector<val>(10);
for (int i = 0; i< 10; i++) {
val t;
t.data = j;
t.sData = j*10;
a->push_back(t);
}
pthread_create(&thr[j], NULL, &foo, &a);
}
pthread_join(thr[0],NULL);
pthread_join(thr[1],NULL);
return 0;
}
预期输出:
thread 0 &&& 0
....
....
thread 1 &&& 10
thread 1 &&& 10
....
....
答案 0 :(得分:1)
您正在为线程提供指向局部变量的指针。此变量随后在循环的右括号处立即销毁。 foo
最终访问了一个悬空的指针,因此您的程序表现出未定义的行为。