线程(C++11)

不同平台、框架、语言所使用的线程函数不同。对于初学者选择一种适合自己的,用熟用透即可。

Windows中,CreateThread()

Linux中,pthread_create()

MFC框架中,AfxBeginThread()

Qt框架中,QThread类

C++11中,thread类

本文只介绍关于C++11的线程知识:添加 #include<thread>

原则上:主线程需等待子线程执行完毕后再退出。不推荐用detach(),子线程会失去与主线程的关联。

//Win32 控制台应用程序
#include "stdafx.h"

#include<iostream>
#include<thread>

using namespace std;

void myprint()//线程函数
{
    cout << "子线程开始" << endl;

    cout << "子线程结束" << endl;
}
int main()
{
    cout << "主线程开始" << endl;
    thread t(myprint);//创建线程对象t,并执行线程
    if (t.joinable()) //判断是否能join
    {
        cout << "子线程可以join" << endl;
        t.join();//阻塞主线程,直到此线程执行完毕
    }
    else
    {
        cout << "子线程不可以join" << endl;
    }

    cout << "主线程结束" << endl;
    return 0;
}

对【参考】的总结:

1、什么时候需要加锁和解锁?

多线程访问的公共变量,如果只读就没必要加锁解锁。

如果线程会改变这个公共变量,那就加锁解锁。此时推荐使用原子变量。(只允许被一个线程访问,不冲突,也不用写加锁、解锁等代码) 

2、多线程调用同一个函数,需要加锁解锁吗?

道理与问题1一样,只读就没必要加锁解锁。

 

【参考】更详细的内容在参考链接中,值得一看。注意#include<thread>后不需要再引入chrono类,其中已包含。

c++11 多线程入门教程(一)

C++ std::thread概念介绍

C++ thread用法总结(整理)

两个线程同时调用一个函数会出现什么情况?

posted @ 2019-12-17 15:18  夕西行  阅读(319)  评论(0编辑  收藏  举报