Я пытаюсь отправить вектор как данные в pthread. Но когда я пытаюсь напечатать идентификатор потока, его поступающее значение мусора.
Если я запускаю этот код с одним потоком, он работает нормально. Но когда я запускаю его с двумя потоками, он не работает.
#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
....
....