我想将我的功能的两个部分分开以使其更快。在每两个分开的部分中,有一些数据我想稍后使用(在//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
当然,在这两个部分中有很多事要做,这只是一个例子。
答案 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);
}
}
}