美文网首页
C++在类里面写线程

C++在类里面写线程

作者: 寽虎非虫003 | 来源:发表于2021-01-27 14:18 被阅读0次

    一、主要参考

    C++ 类中使用多线程;
    C++11多线程并发基础入门教程;

    二、一个最小程序

    #include<iostream>
    #include<thread>
    #include<mutex>
    using namespace std;
    mutex m;//实例化m对象,不要理解为定义变量
    class CT
    {
        private:
        int a;
    public:
        CT(){}
        ~CT(){}
    
        static void proc1(CT *p)
        {
            m.lock();//手动锁定
            lock_guard<mutex> g1(m,adopt_lock);
            cout << "proc1函数正在改写a" << endl;
            cout << "原始a为" << p->a << endl;
            cout << "现在a为" << p->a + 2 << endl;
        }//自动解锁
    
        static void proc2(CT *p)
        {
            lock_guard<mutex> g2(m);//自动锁定
            cout << "proc2函数正在改写a" << endl;
            cout << "原始a为" << p->a << endl;
            cout << "现在a为" << p->a + 1 << endl;
        }//自动解锁
    
        static void proc3(CT *p)
        {
            lock_guard<mutex> g3(m);//自动锁定
            cout<<"proc 3"<<endl;
        }
    
        void run()
        {
            a = 0;
            thread pro1;
            pro1 = thread(proc1, this);
            thread pro2(proc2, this);
    
            thread pro3;
            pro3 = thread(proc3,this);
            pro1.join();
            pro2.join();
            pro3.join();
    
            return;
        }
    
    };
    
    int main()
    {
        CT A;
        A.run();
        
        return 0;
    }
    

    对应的cmake文件

    cmake_minimum_required(VERSION 3.1)
    
    #-pthread 是为了能正常链接多线程
    set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread")
    
    project(th)
    
    add_executable(th4 th4.cpp)
    
    

    三、简单总结

    1、线程函数声明为静态成员函数;
    2、对静态的线程函数加一个this指针指向当前成员。

    相关文章

      网友评论

          本文标题:C++在类里面写线程

          本文链接:https://www.haomeiwen.com/subject/rjhazktx.html