一、主要参考
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指针指向当前成员。
网友评论