• c++11 std:thread 多线程


    参考:

    1.C++11 并发指南一(C++11 多线程初探)

    2.C++11 并发指南二(std::thread 详解)

    3.C++11 Thread多线程的学习心得与问题

    4.C++11多线程(简约但不简单)

    5.github(《c++并发编程》基本上述所以例子都出于这里,也不是很长,有一点基础的直接看这个就行)

    如果第一次接触,直接看我给的参考即可,看过了之后,我把我觉得ok的重点总结在了下面

    -----------------------------------------------------笔记--------------------------------------------------

    博客一:(一个简单例程+makefile)

    #include <stdio.h>
    #include <stdlib.h>
    
    #include <iostream> // std::cout
    #include <thread>   // std::thread
    
    void thread_task() {
        std::cout << "hello thread" << std::endl;
    }
    
    /*
     * ===  FUNCTION  =========================================================
     *         Name:  main
     *  Description:  program entry routine.
     * ========================================================================
     */
    int main(int argc, const char *argv[])
    {
        std::thread t(thread_task);
        t.join();
    
        return EXIT_SUCCESS;
    }  /* ----------  end of function main  ---------- */
    View Code
    all:Thread
    
    CC=g++
    CPPFLAGS=-Wall -std=c++11 -ggdb
    LDFLAGS=-pthread
    
    Thread:Thread.o
        $(CC) $(LDFLAGS) -o $@ $^
    
    Thread.o:Thread.cc
        $(CC) $(CPPFLAGS) -o $@ -c $^
    
    
    .PHONY:
        clean
    
    clean:
        rm Thread.o Thread
    View Code

     

    博客二:(算是cplusplus官网给的.join()例子的扩充,挺好的)(也有其他函数的官网链接)

    #include <stdio.h>
    #include <stdlib.h>
    
    #include <chrono>    // std::chrono::seconds
    #include <iostream>  // std::cout
    #include <thread>    // std::thread, std::this_thread::sleep_for
    
    void thread_task(int n) {
        std::this_thread::sleep_for(std::chrono::seconds(n));
        std::cout << "hello thread "
            << std::this_thread::get_id()
            << " paused " << n << " seconds" << std::endl;
    }
    
    /*
     * ===  FUNCTION  =========================================================
     *         Name:  main
     *  Description:  program entry routine.
     * ========================================================================
     */
    int main(int argc, const char *argv[])
    {
        std::thread threads[5];
        std::cout << "Spawning 5 threads...
    ";
        for (int i = 0; i < 5; i++) {
            threads[i] = std::thread(thread_task, i + 1);
        }
        std::cout << "Done spawning threads! Now wait for them to join
    ";
        for (auto& t: threads) {
            t.join();
        }
        std::cout << "All threads joined.
    ";
    
        return EXIT_SUCCESS;
    }  /* ----------  end of function main  ---------- */
    View Code

    结果是隔一秒打印一行

    其他成员函数

     

    博客三:(有一个使用互斥量的例子,介绍了volatile关键字)

    如果该线程是在同一类的某一成员函数当中被构造,则直接用this关键字代替即可。

    这里使用this指针代替实例化对象的地址

    #include<iostream>
    #include<thread>
    #include<mutex>
    
    std::mutex mut;
    
    class A{
    
    public:
    
        volatile int temp;
    
        A(){
            temp=0;
        }
    
        void fun(int num){
    
            int count=10;
            while(count>0){
    
                mut.lock();
                temp++;
                std::cout<<"thread_"<<num<<"...temp="<<temp<<std::endl;
                mut.unlock();
    
                count--;
            }
        }
    
        void thread_run(){
                std::thread t1(&A::fun,this,1);   
    
                std::thread t2(&A::fun,this,2);
    
                t1.join();
                t2.join();
        }
    };
    
    int main(){
    
        A a;
    
        a.thread_run();
    }
    View Code

     

    参考五:(hardware_concurrency)

    检测硬件并发特性,返回当前平台的线程实现所支持的线程并发数目,但返回值仅仅只作为系统提示(hint)。

    #include <iostream>
      #include <thread>
       
      int main() {
          unsigned int n = std::thread::hardware_concurrency();
          std::cout << n << " concurrent threads are supported.
    ";
      }

    虚拟机设置为2核,支持两个线程并发

  • 相关阅读:
    bigint int smallint tinyint 我是个马大哈
    [转载]Jquery主要控件的取值、赋值,包括textbox,butt
    几个时间转化格式
    Linq 事务问题
    手机网页开发
    PM2.5口罩网上热销 防护作用有限“噱头”多
    按F5键刷新造成的数据重复提交
    Ajax中遇到的一点细节问题
    WCF(二)将WCF发布到WindowsService
    WCF(一)
  • 原文地址:https://www.cnblogs.com/exciting/p/11162855.html
Copyright © 2020-2023  润新知