C++ 线程似乎得到了相同的线程参数,但它们应该是不同的(PThreads)

C++ 线程似乎得到了相同的线程参数,但它们应该是不同的(PThreads),c++,multithreading,parameters,pthreads,C++,Multithreading,Parameters,Pthreads,似乎出于某种原因,我的pthread得到了相同的参数,尽管每次输入的字符串不同 int* max = new int[numberOfFiles]; pthread_t* threads = new pthread_t[numberOfFiles]; for(int i = 0; i < numberOfFiles; i++) { stringstream filestream; filestream << "file" << i + 1 <

似乎出于某种原因,我的pthread得到了相同的参数,尽管每次输入的字符串不同

int* max = new int[numberOfFiles];
pthread_t* threads = new pthread_t[numberOfFiles];

for(int i = 0; i < numberOfFiles; i++)
{
    stringstream filestream;
    filestream << "file" << i + 1 << ".txt";
    string message = filestream.str();
    pthread_create(&threads[i], NULL, findLargestInFile, (void*)message.c_str());
    cout << message << endl;
}

...

void* findLargestInFile(void* rawFileName)
{
    char* fileName = (char*)rawFileName;
    cout << fileName << endl;
}
int*max=newint[numberOfFiles];
pthread_t*threads=newpthread_t[numberOfFiles];
对于(int i=0;ifilestream由
c_str()
返回的
char*
将在循环体的末尾被删除。这意味着,程序的行为是未定义的,只是偶然地,您在每个线程中看到相同的值

在C++11中使用线程要容易得多。代码可能如下所示:

std::vector<std::thread> threads;
for (int i = 0; i < numberOfFiles; ++i) {
    std::stringstream filestream;
    filestream << "file" << i + 1 << ".txt";
    std::string message = filestream.str();
    threads.emplace_back(&findLargestInFile, message);
}

void findLargestInFile(std::string rawFileName)
{
    // ...
}
std::向量线程;
对于(int i=0;ifilestream太棒了,非常感谢。不幸的是,我在这个项目中一直使用pthreads,但这应该会让我找到一个解决方案。