线程(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 @   夕西行  阅读(320)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示