std::promise的作用
时间: 2023-10-23 12:15:16 浏览: 45
std::promise是C++11中的一个工具,用于在一个线程中产生一个值,另一个线程可以在以后的某个时间点获取这个值。具体来说,std::promise可以将一个值与一个std::future对象相关联,这个std::future对象可以在另一个线程中获取该值。
std::promise的基本用途是,让一个线程在执行某个任务时,能够在另一个线程中异步地获取这个任务的结果。例如,一个线程可以使用std::promise对象来表示一个异步操作的结果,另一个线程可以使用std::future对象来等待这个结果的到来。这个机制可以用来实现一些高级的并发编程技术,例如Futures和Promises。
总之,std::promise的作用是提供了一个线程间通信的机制,使得一个线程可以在另一个线程完成某个任务后获取结果。
相关问题
std::future std::promise
std::future是一个模版类,用于获取异步操作的结果。它是不可拷贝对象,类似于std::unique_ptr,具有对所管理的资源的独占权。通过std::future,你可以从std::promise获得相应的值,询问std::promise是否将值设置为可用,等待std::promise的通知,可以设置一个相对时间间隔或绝对时间,还可以创建一个共享的future(std::shared_future)。
std::promise是用于在多线程编程中实现单向数据传递的一种方式。它是数据的输入端,而std::future则是数据的输出端。通过std::promise和std::future,可以在不同的线程之间传递数据。
总结来说,std::future和std::promise是用于在多线程环境下进行数据传递和同步的重要工具。std::future用于获取异步操作的结果,而std::promise用于将数据传递给std::future。它们在C++中提供了一种方便且安全的方式来处理多线程间的数据共享和通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [c++11 多线程之future和promise](https://blog.csdn.net/weixin_44834554/article/details/127515771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
std::promise
std::promise是C++11并发编程中常用的一个类,常配合std::future使用。它的作用是在一个线程中保存一个特定类型的值,供与之绑定的std::future对象在另一个线程中获取。\[1\]
下面是一个示例代码,展示了std::promise的使用方法:
```cpp
#include <iostream>
#include <future>
#include <chrono>
void Thread_Fun1(std::promise<int>& p) {
std::this_thread::sleep_for(std::chrono::seconds(5));
int iVal = 233;
std::cout << "传入数据(int):" << iVal << std::endl;
p.set_value(iVal);
}
void Thread_Fun2(std::future<int>& f) {
auto iVal = f.get();
std::cout << "收到数据(int):" << iVal << std::endl;
}
int main() {
std::promise<int> pr1;
std::future<int> fu1 = pr1.get_future();
std::thread t1(Thread_Fun1, std::ref(pr1));
std::thread t2(Thread_Fun2, std::ref(fu1));
t1.join();
t2.join();
return 0;
}
```
在这个示例中,我们创建了一个std::promise对象pr1,并通过pr1的get_future()函数与一个std::future对象fu1绑定。然后我们创建了两个线程t1和t2,分别执行Thread_Fun1和Thread_Fun2函数。在Thread_Fun1中,我们通过set_value()函数将一个整数值传入pr1。在Thread_Fun2中,我们通过阻塞函数get()获取到了传入的数据,并进行输出。\[2\]
从示例中可以看到,std::promise对象可以保存各种类型的数据,包括函数指针等。\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [[C++11]std::promise](https://blog.csdn.net/weixin_43743711/article/details/115770638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]