C++ 多线程编程入门基础

        好消息好消息,C++98里没有的线程库C++11里终于有了!!!不要9.9元,只要包含头文件thread,就可免费使用它,赶紧打开你的IDE开始多线程编程吧!
在这里插入图片描述

       

       

       

1、join()

       
        首先,需要包含线程库的头文件 #include <thread> ,当然也要using namespace std
        然后,创建一个线程,代码如下。

void fun1() {
   
    cout << "fun1()" << endl;
}

int main() {
   
    thread t1(fun1);    // 创建一个线程,名为t1,这个线程会执行fun1()函数
    t1.join();          // 主线程main会一直阻塞直到子线程t1运行完成 
    cout << "main()" << endl;   
}
       

        main是主线程,t1是主线程中的子线程,在这个线程里执行函数fun1()。使用join()函数,那么主线程就会一直阻塞t1.join();的位置,直到子线程t1运行结束后,再接着执行后面的语句。
       什么意思呢?请看下面这个例子,我们暂且把t1.join();删掉:

void fun1() {
   
    this_thread::sleep_for(chrono::seconds(1));  // 先休眠1秒
    cout << "fun1()" << endl;
}

int main() {
   
	thread t1(fun1);    // 创建一个线程,名为t1,这个线程会执行fun1()函数
	cout << "main()" << endl;
	system("pause");
}

       fun1()函数里写了一个休眠1s的语句,所以t1线程在还没有打印fun1的时候,主线程由于没有写join()函数阻塞起来,就会继续往后执行,先打印出main,等t1休眠了1s后,才打印出fun1。
       

       join()函数除了阻塞作用,另一个作用就是回收该线程使用到的资源,上面的程序把join()删掉了,子线程t1的资源不能正确回收,程序运行会报错“abort() has been called”。

       

       
       

2、detach()

        那如果子线程t1的运行时间太长了,我不想让主线程阻塞等待t1运行,怎么办呢?下面就介绍detach()函数。
        detach()函数的作用是将子线程和主线程分离,让子线程在后台独立运行。如果主线程运行很快,先结束运行了,子线程还未执行完的话,那么子线程会在后台继续执行,执行完毕时由线程库回收其资源。
       请看如下例子,主线程中创建子线程t1,通过detach()函数,t1从主线程中分离并开始运行,输出fun1()开始 ,然后休眠1s,这个过程中主线程输出main(),然后子线程休眠结束,输出fun1()结束

void fun1() {
   
    cout << "fun1()开始" << endl;
    this_thread::sleep_for(chrono::seconds(<
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值