跳至主要內容

多线程 - 其他标准库函数

LincZero大约 1 分钟

多线程 - 其他标准库函数

【总结】前面用到过的标准库函数

创建对象类

  • std::thread mythread(mythreadfn);,创建线程类对象
    • 参数
      • 入口函数
      • 其他要传递给入口函数的变量
    • 成员函数
      • join()
      • detach()
      • joinable()
  • std::mutex mymutex;,创建互斥量对象
  • std::lock_guard<std::mutex> sbguard(my_mutex);,创建智能互斥量对象
    • 参数
      • 互斥量对象
      • std::adopt_lock,第二参数,标志不需要再lock
  • std::unique_lock<std::mutex> sbguard(my_mutex);,创建智能互斥量对象
    • 参数
      • 互斥量对象
      • std::adopt_lock,第二参数,标志不需要再lock
      • std::try_to_lock,第二参数,尝试去lock(),若没有锁定成功则立即返回,而不会阻塞
      • std::defer_lock,第二参数,初始化一个没有加锁的mutex
    • 成员函数
      • lock(),加锁,和互斥量用法一样
      • unlock(),解锁,和互斥量用法一样
      • try_lock(),尝试给互斥量加锁,如果拿不到锁则返回false,否则返回true。不阻塞
      • release(),返回它管理的mutext对象指针,并释放所有权

其他操作类

  • std::this_thread::get_id();,获取线程id

  • std::call_once(),保证某个函数只被调用一次

  • std::ref(),用于多线程中对象的引用传递

  • std::move(),用于多线程中智能指针的所有权转移

  • 休眠操作

    std::chrono::milliseconds dura(2000);			// 【20s】
    std::this_thread::sleep_for(dura);				// 【休息20s】
    

std::