C++多线程-chap3 多线程异步和通信

这里,只是记录自己的学习笔记。

顺便和大家分享多线程的基础知识。然后从入门到实战。有代码。

知识点来源:

https://edu.51cto.com/course/26869.html


 

Promise 和 Future 的原理,以及演示

 1 //线程异步和通信
 2 
 3 
 4 /*
 5 //promise 和 future
 6 
 7 promise 用于异步传输变量
 8     std::promise 提供存储异步通信的值,再通过其对象创建的std::future异步获得结果。
 9     std::promise 只能使用一次。void set_value(_Ty&& _Val)设置传递值,只能调用一次
10 
11 std::future 提供访问异步操作结果的机制
12     get()阻塞等待 promise set_value 的值
13 
14 */
15 
16 #include <iostream>
17 #include <thread>
18 #include <future>
19 #include <string>
20 using namespace std;
21 
22 void TestFuture(  promise<string> p){
23     cout << "begin TestFuture" << endl;
24 
25     this_thread::sleep_for(4s);
26     cout << "begin set value" << endl;
27 
28     p.set_value("TestFuture value");
29     this_thread::sleep_for(4s);
30 
31     cout << "end TestFuture" << endl;
32 }
33 
34 int main() {
35     //异步传输变量存储
36     promise<string> p;
37 
38     //用来获取线程异步值
39     auto future = p.get_future();
40 
41     thread th(TestFuture, move(p));
42 
43     cout << "begin future.get()" << endl;
44     cout << "future get() =" << future.get() << endl;//线程在此处阻塞。等到 调用了 set_value 之后,阻塞取消。
45     cout << "end future.get()" << endl;
46     th.join();
47 
48     //  begin future.get()...线程在此处阻塞。等到 调用了 set_value 之后,阻塞取消。
49     //    begin TestFuture
50     //    begin set value   
51     //    future get() = TestFuture value
52     //    end future.get()
53     //    end TestFuture
54 
55 
56     getchar();
57     return 0;
58 }

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:踩坑笔记-setInterval越来越快


下一篇:JavaScript探索