Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost regex_replace可以并行执行吗?_C++_Regex_Multithreading_Boost - Fatal编程技术网

C++ Boost regex_replace可以并行执行吗?

C++ Boost regex_replace可以并行执行吗?,c++,regex,multithreading,boost,C++,Regex,Multithreading,Boost,我曾尝试在代码中使用boost线程和regex,但对regex\u replace的行为感到困惑 在测试类中,我尝试执行regex_replace2000000次次,以THREAD_NUMthreads分隔: class ThreadClass { public: ThreadClass() { _urlExp.assign(L"/*a regex expression here*/", wregex::icase); } void runThread()

我曾尝试在代码中使用boost线程和regex,但对
regex\u replace
的行为感到困惑

在测试类中,我尝试执行regex_replace
2000000次
次,以
THREAD_NUM
threads分隔:

class ThreadClass {
public:
    ThreadClass() {
        _urlExp.assign(L"/*a regex expression here*/", wregex::icase);
    }
    void runThread() {
        for (int i=0; i<2000000/THREAD_NUM; i++) {
        wstring wtext(L"/*a long url here*/");
        regex_replace(wtext, _urlExp, L"[URL]");
    }
}
private:
    wregex _urlExp;
};
正如我所评论的,当只运行一个线程时,代码花费28.58秒;但是,如果我取消对第二个线程的注释,代码将花费36.28秒

当使用2线程时,CPU实际上是200%。我知道由于多线程成本的原因,2线程时间应该大于14.29s,但是怎么可能大于28.58s呢

regex_replace实际上是不是不并行,线程之间是否在等待?或者我的代码或编译有问题

联阿援助团-a:

Linux e100069200229.zmf 2.6.32-220.23.2.ali927.el5.x86_64 #1 SMP Mon Jan 28 14:57:06 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

16核CPU,boost 1.49.0,gcc 4.1.2,使用
-O2

编译,在哪里定义了
THREAD\u NUM
呢?噢,sry:
THREAD\u NUM
在第二个线程被注释掉时设置为1,在未注释时设置为2。我在这里写这个注释,因为我的答案不能解决这个问题(由于它是在粘贴代码中发布的,除了
(tend.tv_usec-tstart.tv_usec)/1000000
将始终产生零,因为
tv_usec
保证小于1000000,并且这里执行整数除法,请更改为1000000.0以执行浮点除法),我将删除它。但是,我无法重现您的问题。通过更改代码,使其能够在Windows下编译(主要是运行时间计算代码-使用的函数),并使其更具可重新运行性-使其能够计算多个线程计数的基准,并使用单个设置(线程计数)多次运行结果如下:
线程数=1;运行时间=30.65s
线程数=2;运行时间=19.31s
线程数=3;运行时间=15.86s
线程数=4;运行时间=13.86s
。此外,我还需要更改
boost::Thread
>,到
std::thread
,因为我的机器上没有boost。可能是
boost::thread
有问题。
Linux e100069200229.zmf 2.6.32-220.23.2.ali927.el5.x86_64 #1 SMP Mon Jan 28 14:57:06 CST 2013 x86_64 x86_64 x86_64 GNU/Linux