在Mac OS中对多线程进行pthread多线程处理

时间:2014-11-19 12:38:58

标签: c++ windows multithreading macos

我开发了一个多平台程序(使用FLTK工具包)并实现多线程来执行后台密集型任务。

我已经关注多线程的FLTK教程/示例,其中涉及在Mac上使用pthread,即函数pthread_create和Windows上的窗口线程,即_beginthread

我注意到Windows上的性能要高得多,即在这些后台线程中(执行它们的时间)快3到4倍。

为什么会这样?是我使用的线程库吗?当然不应该有这样的差异吗?或者它可能是它下面的运行时库吗?

这是我的机器详情

的Mac:

Intel(R)Core(TM)i7-3820QM CPU @ 2.70GHz

16 GB DDR3 1600 MHz

型号MacBookPro9,1

操作系统:Mac OSX 10.8.5

视窗:

Intel(R)Core(TM)i7-3520M CPU @ 2.90GHz

16 GB DDR3 1600 MHz

型号:戴尔Latitude E5530

操作系统:Windows 7 Service Pack 1

修改

为了进行基本的速度比较,我在从命令行运行的两台机器上编译了它

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

    time_t t = time(NULL);
    tm* tt=localtime(&t);
    std::stringstream s;
    s<< std::setfill('0')<<std::setw(2)<<tt->tm_mday<<"/"<<std::setw(2)<<tt->tm_mon+1<<"/"<< std::setw(4)<<tt->tm_year+1900<<" "<< std::setw(2)<<tt->tm_hour<<":"<<std::setw(2)<<tt->tm_min<<":"<<std::setw(2)<<tt->tm_sec;      

    std::cout<<"1: "<<s.str()<<std::endl;

    double sum=0;

    for (int i=0;i<100000000;i++){
        double ii=i*0.123456789;
        sum=sum+sin(ii)*cos(ii);
    }


    t = time(NULL);
    tt=localtime(&t);
    s.str("");
    s<< std::setfill('0')<<std::setw(2)<<tt->tm_mday<<"/"<<std::setw(2)<<tt->tm_mon+1<<"/"<< std::setw(4)<<tt->tm_year+1900<<" "<< std::setw(2)<<tt->tm_hour<<":"<<std::setw(2)<<tt->tm_min<<":"<<std::setw(2)<<tt->tm_sec;

    std::cout<<"2: "<<s.str()<<std::endl;


}

Windows只需不到一秒钟。 Mac需要4/5秒。有什么想法吗?

在Mac上我用g ++编译,在Windows上使用visual studio 2013。

第二次编辑

如果我改变了行

std::cout<<"2: "<<s.str()<<std::endl;

std::cout<<"2: "<<s.str()<<" "<<sum<<std::endl;

然后Windows突然变得更长一点......

这让我觉得整个事情可能是编译器优化。所以问题是g ++(4.2是我的版本)在优化时更糟糕还是我需要提供额外的标志?

第三次(!)和最终编辑

我可以通过确保在编译时提供g ++优化标志-O来报告我实现了相当的性能。经常发生的令人讨厌的事情之一

A:我在问题x上撕掉我的头发

B:你确定你没有做过吗?

答:这很有效,为什么这些信息并没有遍布整个地方以及网上问题x的每个教程?

B:你读过手册了吗?

答:不,如果我完全阅读了我用过的每一段代码/程序的手册,我就永远无法做任何事情......

咩。

0 个答案:

没有答案