C++在类里面写线程

2021-01-27  本文已影响0人  寽虎非虫003

一、主要参考

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指针指向当前成员。

上一篇下一篇

猜你喜欢

热点阅读