gpt4 book ai didi

c++ - Pthread 参数传递

转载 作者:行者123 更新时间:2023-11-28 02:29:53 24 4
gpt4 key购买 nike

我尝试创建一个 pthread,然后在运行我的 readIn 函数后记录一些时间,但是当我在 main 中打印时间时,它显示为一个不正确的值。我是线程的新手,我不知道我是否以正确的方式传递参数。任何见解将不胜感激。

int main(int argc, char **argv){

int read;
pthread_t readerThread;

ReadWrite arglist;
arglist.fileName= inputFile;
arglist.rVal=(RetVal *) malloc(sizeof(struct RetVal));

read= pthread_create(&readerThread, NULL, readIn, (void *) &arglist );

cout << "Total time for reading: "<< (arglist.rVal)->timeUsed << endl;

}

struct ReadWrite {
string fileName;
RetVal * rVal;
} ;

struct RetVal{
int frequency;
double timeUsed;
};

void * readIn(void *arg)
{

struct timeval now, later;
gettimeofday(&now, NULL);
ReadWrite* aList = static_cast<ReadWrite *>(arg);
RetVal *rVal = aList->rVal;
string fileName = aList->fileName;

.....
.....
.....

rVal->frequency = dataSet.size();
rVal->timeUsed = getTimeUsed(now, later);

cout << "Correct time: " << dataSet.size(); << endl;

pthread_exit(NULL);

}

**OUTPUT**

Total CPU time for reading: -1.72723e-77
Correct time: 22841

最佳答案

你没有给你的线程任何时间来运行 - main 中的打印输出甚至可以在你的线程函数启动之前发生,或者就在中间。所以你有数据竞争和未定义的行为。

在对 main 中的结果进行任何操作之前,您应该等待线程完成.使用 pthread_join 为此。

(C++11 也有一个线程库 <thread>,你应该看看它,你可以用它来避免那些丑陋的转换。)

关于c++ - Pthread 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29320939/

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