ToB企服应用市场:ToB评测及商务社交产业平台

标题: c++多线程编程 [打印本页]

作者: 惊雷无声    时间: 2024-5-12 19:18
标题: c++多线程编程
c++线程库:

创建线程:需要可调用的函数或者函数对象作为线程入口点

  1.     例:std::thread threadname ( function_name , args...)   
复制代码
例:(A为一个类,a为A的一个实例化对象) thread t (&A::func_name,&a,args)
增补:在使用多线程编程时,内存管理变得更加复杂,使用智能指针可以帮助我们更好避免内存泄漏

auto_ptr 是c++ 98定义的智能指针模板,其定义了管理指针的对象,可以将new 得到(直接或间接)的地址赋给这种对象。当对象过期时,其析构函数将使用delete 来开释内存
头文件:#include < memory >  

因此c++11后使用unique_ptr shared_ptr和weak_ptr取代
函数:

  1.     thread.join();      //执行join后,等待线程完成函数,主线程需要等待子线程运行结束了才可以结束
  2.    
  3.     thread.detach();    //执行detach可以分离子线程,主线程不会等待子线程运行结束才结束
  4.    
  5.     thread.joinable();  //会返回一个bool值,判断是否已经使用过join或者detach *已调用时返回false*
  6.    
  7.     std::ref(para);         //thread的方法传递引用的时候,必须外层用ref来进行引用传递,否则会编译出错
复制代码
调用类内私有成员函数:友元函数

例: void func_name();需要调用类内的私有成员函数
则在类内需要通过声明 friend void func_name();
c++11 互斥量

互斥量死锁

例:lock_guard< Template > lock_name(obj);

condition_variable及其使用场景

当前线程调用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 几乎完全一样。
异步并发

1. async、future
例:std::future< template > future_name = std::async(std::launch::async, func_name);
2. packaged_task
例: std::packaged_task task_name(func_name);
// 此时得到的是封装好的task对象,需要通过创建线程执行 【记得使用move(task)把可移动对象放入线程执行】
auto result = task_name.get_future();
3. promise
原子操纵:atomic


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4