STM32单片机寻迹循迹走黑线智能车锂电池充电109-1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码
2026/6/25 23:16:15
在并发编程中,之前的示例常使用共享变量在线程间通信,并借助互斥锁来避免数据竞争。然而,随着程序规模增大,使用互斥锁管理共享数据会变得困难,同时维护分散在代码中的显式锁也需要大量工作,这使我们偏离了编写程序的核心目标。此外,我们尚未处理错误处理问题,例如一个线程需要向另一个线程报告错误时该如何操作。
在标准库的<future>头文件中,有一些类模板可帮助我们编写无需全局变量和锁的并发代码,还能在线程间传递异常以处理错误。这里介绍futures和promises,它们代表一个值的两个方面,future用于接收值,promise用于返回值。
以下是使用std::promise向调用者返回结果的示例:
auto divide(int a, int b, std::promise<int>& p) { if (b == 0) { auto e = std::runtime_error{"Divide by zero exception"}; p.set_exception(std::make_exception_ptr(e)); } else { const auto result = a / b; p.set_value(result); } }