首页 > 编程语言 > 详细

c++11 多线程基础一

时间:2021-01-13 17:54:43      阅读:19      评论:0      收藏:0      [点我收藏+]

1、线程的启动结束和创建线程

1.1 thread 创建

三种创建方法:

  1. 用一个初始函数创建一个线程

    #include <iostream>
    #include <thread>
    
    using namespace std;
    
    void print1()
    {
    	cout << "print1_1线程执行" << endl;
    	cout << "print1_2线程执行" << endl;
    	cout << "print1_3线程执行" << endl;
    }
    
    int main()
    {
    	thread mythread1(print1);
    	mythread1.join();
    	cout << "主线程执行" << endl;
    	return 0;
    }
    
  2. 用类对象创建一个线程

    #include <iostream>
    #include <thread>
    
    using namespace std;
    
    class T
    {
    public:
    	void operator()()
    	{
    		cout << "print2_1线程执行" << endl;
    		cout << "print2_2线程执行" << endl;
    		cout << "print2_3线程执行" << endl;
    	}
    };
    
    int main()
    {
    	T t;
    	thread mythread2(t);
    	mythread2.join();
    	cout << "主线程执行" << endl;
    	return 0;
    }
    
  3. 用lambda表达式创建一个线程

    #include <iostream>
    #include<thread>
    using namespace std;
    int main()
    {
        //用lambda表达式创建一个线程
        auto mylamthread = [] {//这是一个lambda表达式
            cout << "我的线程开始执行了" << endl;
            //......
            cout << "我的线程执行结束了" << endl;
        };
        thread mythread3(mylamthread);
        mythread3.join();
        cout << "主线程执行结束" << endl;
        return 0;//表示主线程执行结束,表明进程结束
    }
    

1.2 join方法

join()函数是一个等待线程完成函数,主线程需要等待子线程运行结束了才可以结束

1.3 detach方法

detach()函数是子线程的分离函数,当调用该函数后,线程就被分离到后台运行,主线程不需要等待该线程结束才结束;称为守护线程或者分析线程。

linux 启动程序变为后台进程,可以使用在最后加入&即可;
注意:detach 线程后注意子线程和主线程中变量的关系,防止引用或者指针主线程释放的场景,导致子线程异常。

  • 传递临时对象作为线程参数
  • 传递临时变量作为线程参数
  • 传递类对象或者只能指针作为宪政参数
  • 使用成员函数指针作为线程参数

1.4 joinable方法

用于判断程序是否可以使用detach或者join方法

c++11 多线程基础一

原文:https://www.cnblogs.com/lihaihui1991/p/14272556.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!