Pthread论证传递

时间:2015-03-28 18:28:45

标签: c++ pthreads

我尝试创建一个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

1 个答案:

答案 0 :(得分:2)

你没有给你的线程任何时间运行 - main中的打印输出可以在你的线程功能开始之前发生,或者在中间发生。所以你有一个数据竞争和未定义的行为。

在对main中的结果做任何事情之前,您应该等待线程完成。请使用pthread_join

(另外C ++ 11有一个你应该看的线程库<thread>,你可以避免那些丑陋的演员表。)