用于性能优化的C ++分离函数

时间:2017-07-23 11:54:44

标签: c++ multithreading c++11

我想将我的功能的两个部分分开以使其更快。在每两个分开的部分中,有一些数据我想稍后使用(在//Do someting else.部分中)。

我想到std::thread但它似乎很慢,因为它需要太多时间来设置。然后我根据建议尝试了std::async,它比std::thread好,但仍比原始代码慢(没有线程,只是调用函数)。

示例代码:

Variables
    INT a, INT b

Part1
    a = 4 + 5
End of Part1

Part2
    b = 2 + 6
End of Part2

Main
    Loop (endless)
        call Part1
        call Part2
        print (a - b)
        call Loop
    End of Loop

End of Main

当然,在这两个部分中有很多事要做,这只是一个例子。

1 个答案:

答案 0 :(得分:2)

  

我想知道我是否可以重置它们或者让它可以加入'再次。你有任何解决方案吗?

std::thread可移动,因此您可以在join()电话后"重新分配"

t1 = std::thread{ThreadFunc1};
t2 = std::thread{ThreadFunc2};

或者根本不加入,你可以设计你的线程函数有点不同,并使用某种同步方法。例如。类似的东西:

std::mutex m1;
std::condition_variable cv1;
std::atomic<bool> stop1;

void ThreadFunc1() {
    while(!stop1) {
        {
            std::unique_lock<std::mutex> lk(m1);
            cv1.wait(lk);
        }
        // Do work ...
        cv1.notify_one();
    }
}

int main() {
    std::thread t1{ThreadFunc1};

    while(true) {
       // Trigger thread to do work
       cv1.notify_one();

       // Wait for thread to get it's work done
       {
           std::unique_lock<std::mutex> lk(m1);
           cv1.wait(lk);
       }
    }
}