zoukankan      html  css  js  c++  java
  • 线程(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用法总结(整理)

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

  • 相关阅读:
    <iframe>相关问题
    文字描边
    jquery 设置css margin-left
    uni-app mustache表达式
    Uni-app 响应式像素upx
    Uni-app页面进入和返回
    Uni-app 生命周期
    Sql添加/删除默认值
    Uni-app初体验(创建新路由)
    Uni-app初体验(页面绑定数据)
  • 原文地址:https://www.cnblogs.com/xixixing/p/12054714.html
Copyright © 2011-2022 走看看