首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于性能优化的C++分离函数

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

Stack Overflow用户
提问于 2017-07-23 19:54:44
回答 1查看 68关注 0票数 0

我想把我的函数的两个部分分开,以使它更快。在每两个分离的部分中,都有我想在以后使用的数据(在//Do someting else.部分中)。

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

示例代码:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2017-07-23 19:58:13

我想知道我是否可以重置它们或者再次‘使它可接合’。你有什么解决方案吗?

std::thread是可移动的,因此您可以在join()调用后简单地“重新分配”它们:

代码语言:javascript
复制
t1 = std::thread{ThreadFunc1};
t2 = std::thread{ThreadFunc2};

或者,您可以设计一些不同的线程函数,并使用某种同步方法,而不是完全连接。例如,类似的东西:

代码语言:javascript
复制
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);
       }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45264793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档