gpt4 book ai didi

c++ - 如何获取正确的线程 ID 和值

转载 作者:行者123 更新时间:2023-11-30 04:46:30 25 4
gpt4 key购买 nike

我正在尝试将 vector 作为数据发送到 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
....
....

最佳答案

您正在为线程提供一个指向局部变量的指针。该变量随后立即在循环的右大括号处被销毁。 foo 最终访问了一个悬挂指针,因此您的程序表现出未定义的行为。

关于c++ - 如何获取正确的线程 ID 和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com