同样是c++课设中需要用到的知识点,简要记录一些理解与运用。
概念理解
并发就是为了满足同时执行多个活动并且相互独立。
进程是由一个或多个线程构成,而每一个线程独立进行工作。
可以这样说每一个线程几乎都共享同样的代码和资源数据。
并发程序基础要点
#include<thread>
:头文件
thread
:线程函数的加入一次线程的声明。
mutex
:互斥锁,一般用于对于共享资源的操作时,需要使用。
condition_variable
:条件变量,一般用于判断线程中的一些判断。
thread::join()
:阻塞当前线程,等待子线程的执行,直至 *this
所标识的线程完成其执行。
thread::detach()
:从 thread
对象分离执行的线程,允许执行独立地持续。
简要实现
#include<iostream>
#include<thread>
#include<mutex>
using namespace std;
class Singleton{
private:
mutex mymutex;
Singleton(){
cout << "Singleton constructed!" << endl;}
Singleton(const Singleton&)=delete;
Singleton& operator=(const Singleton&)=delete;
~Singleton(){
cout<< "Singleton destructed" << endl;}
public:
static Singleton& GetInstance() {
static Singleton object;
return object;
}
static int num_1;
static int num_2;
void start();
void fun();
void fun_1(){
cout << num_2 << endl;}
};
int Singleton::num_2 = 0;
int Singleton::num_1 = 0;
int main()
{
Singleton& instance = Singleton::GetInstance();
instance.start();
return 0;
}
void Singleton::start()
{
while(num_1 < 10){
num_1++;
thread child(fun,this);
child.detach();
}
}
void Singleton::fun()
{
mymutex.lock();
cout << "完成主线程调用子线程:" << num_1 << endl;
mymutex.unlock();
while(num_2 < 10){
num_2++;
thread child_1(fun_1,this);
child_1.detach();
}
}
测试结果