我想把我的函数的两个部分分开,以使它更快。在每两个分离的部分中,都有我想在以后使用的数据(在//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当然,在这两个部分中有很多事情要做,这只是一个例子。
发布于 2017-07-23 19:58:13
我想知道我是否可以重置它们或者再次‘使它可接合’。你有什么解决方案吗?
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);
}
}
}https://stackoverflow.com/questions/45264793
复制相似问题