c++多线程总结

进程

进程就是一个正在执行程序的实例。

  • 运行态
  • 就绪态
  • 阻塞态

线程API

1.1 std

#include <iostream>       // std::cout
#include <thread>         // std::thread
 
void foo() {
  // do stuff...
}

void bar(int x){
  // do stuff...
}

int main() {
  std::thread first (foo);
  return 0;
}
  • get_id() 获得线程ID。
  • joinable() 检查是否可执行。
  • join() 等待线程结束。
  • detach() 分离线程,使其变成一个独立的线程,分离线程为守护线程(daemon threads)。
  • swap() 交换两个线程的状态。
  • native_handle()
  • hardware_concurrency()这个函数将返回能同时并发在一个程序中的线程数量。

1.2 pthread

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(start_routine)(void *), void *arg);
  • thread是一个输出参数,线程创建成功的话可以得到线程的ID。
  • pthread_t pthread_self(void); Linux中获得线程ID。

1.3 获得线程ID的方式

  • pthread_create()
  • pthread_self()
  • syacall(SYS_gettid)

线程管理

  • 使用一个能访问局部变量的函数去创建线程是一个糟糕的主意,可能会出现函数已经结束,线程依旧访问局部变量。
  • 当倾向于在无异常的情况下使用join()时,需要在异常处理过程中调用join(),从而避免生命周期的问题。
  • 使用RAII(资源获取即初始化方式)能有效避免一些问题。
  • 向线程函数传递参数时要注意:std::thread的构造函数只会复制提供的变量。成功的情况是,复制一个引用。在线程更新数据结构时,会成功的传递一个引用。
转移线程所有权
  • std::thread都是可移动(movable),但不可拷贝(cpoyable)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值