【问题标题】:Pthread Argument PassingPthread 参数传递
【发布时间】:2015-03-28 18:28:45
【问题描述】:

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

【问题讨论】:

    标签: c++ pthreads


    【解决方案1】:

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

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

    (C++11 也有一个线程库&lt;thread&gt;,你应该看看它,你可以用它来避免那些丑陋的演员表。)

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2012-09-03
      • 2013-12-10
      • 2016-01-08
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多