例:(A为一个类,a为A的一个实例化对象) thread t (&A::func_name,&a,args)增补:在使用多线程编程时,内存管理变得更加复杂,使用智能指针可以帮助我们更好避免内存泄漏
auto_ptr 是c++ 98定义的智能指针模板,其定义了管理指针的对象,可以将new 得到(直接或间接)的地址赋给这种对象。当对象过期时,其析构函数将使用delete 来开释内存函数:
头文件:#include < memory >
- 【c++11已过期】auto_ptr 变量名(new 类型)
·ptr.get() //获取智能指针托管的指针地址
·ptr.release() //取消智能指针对动态内存的托管
·ptr.reset(arg) //将参数的指针(不指定则为NULL),与托管的指针比较,假如地址不一致,那么就会析构掉原来托管的指针,然后使用参数的指针替换之
因此c++11后使用unique_ptr shared_ptr和weak_ptr取代
- auto_ptr 主要有三大问题:
· 复制和赋值会改变资源的全部权,不符合人的直觉。
· 在 STL 容器中使用auto_ptr存在风险,因为容器内的元素必需支持可复制和可赋值。
· 不支持对象数组的操纵
- unique_ptr
例: void func_name();需要调用类内的私有成员函数c++11 互斥量
则在类内需要通过声明 friend void func_name();
例:lock_guard< Template > lock_name(obj);
当前线程调用wait()后将被壅闭,直到别的某个线程调用notify_唤醒当前线程;当线程被壅闭时,该函数会主动调用std::mutex的unlock()开释锁,使得其它被壅闭在锁竞争上的线程得以继续执行。一旦当前线程得到关照(notify,通常是别的某个线程调用notify_唤醒了当前线程),wait()函数也是主动调用std::mutex的lock()。wait分为无条件被壅闭和带条件的被壅闭两种。
condition_variable_any 先容异步并发
与 condition_variable 类似,只不过 condition_variable_any 的 wait 函数可以接受任何 lockable 参数,而condition_variable 只能接受 unique_lock< mutex > 类型的参数,除此以外,和 :condition_variable 几乎完全一样。
例:std::future< template > future_name = std::async(std::launch::async, func_name);2. packaged_task
例: std::packaged_task task_name(func_name);3. promise
// 此时得到的是封装好的task对象,需要通过创建线程执行 【记得使用move(task)把可移动对象放入线程执行】
auto result = task_name.get_future();
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |