C++并发类成员函数调用(练习1)

Posted MICBB

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++并发类成员函数调用(练习1)相关的知识,希望对你有一定的参考价值。

一般类成员函数开线程格式 std::thread t1(&类名::函数,&实例化对象,参数....) ||std::thread t1(std::bind(&&类名::函数,&实例化对象,参数....))

 1 #include <iostream>
 2 #include <mutex>
 3 #include <thread>
 4 #include <vector>
 5 #include <string>
 6 #include <condition_variable>
 7 #include <future>
 8 
 9 
10 template<typename T>
11 class vector_safe
12 {
13 public:
14     vector_safe():ready(false),proccess(false){}
15 public:
16     void push(T& value)
17     {
18         std::unique_lock<std::mutex> m_guard(mut);
19         vec.push_back(value);
20         ready=true;
21         m_guard.unlock();
22         condit_va.notify_one();
23     }
24     void get_and_pop(T& value)
25     {
26         std::unique_lock<std::mutex> m_guard(mut);
27         condit_va.wait(m_guard,[this](){return ready;});//wait-------线程完毕数据;
28                        
29         value=vec.front();
30         vec.pop_back();
31         proccess=true;
32          m_guard.unlock();
33     
34     }
35 private:
36     std::vector<T> vec;
37     std::mutex mut;
38     std::condition_variable condit_va;
39     bool ready;
40     bool proccess;
41 
42 };
43 vector_safe<std::string> obj;
44 
45 int main()
46 {
47     
48         std::string str1("this is dream");
49         std::string str2("没覆盖?");
50     std::thread t1(std::bind(&vector_safe<std::string>::push,&obj,std::ref(str1)));
51     std::thread t2(std::bind(&vector_safe<std::string>::get_and_pop,&obj,std::ref(str2)));
52         t1.join();
53         t2.join();
54         std::cout<<str2<<std::endl;
55         return 0;
56 }
运行结果:
xcode 7.2
this is dream
Program ended with exit code: 0

 

以上是关于C++并发类成员函数调用(练习1)的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用类的成员函数在并发线程中运行而无需在 C++11 中传递 *this?

反射Reflect基础 今天主要在练习调用 Class的各种方法,以及getField() getMethod()方法.

C ++类函数如何存储私有成员的值并将其写入数组?

在另一个类c ++中调用成员函数

c ++调用非默认构造函数作为成员[重复]

C++历史