Pthread参数传递



我试图创建一个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中的结果执行任何操作。使用pthread_join

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

最新更新