有时候,模拟化工作只需要做一次,假设SystemInit()是一个初始化程序块,我们在整个程序中只运行执行一次,即使多个线程使用该SystemInit()进行多次初始化也不行。使用mutex对该块函数进行上锁。#include , 编写完 SystemInit(),再编写一个只执行一次的函数 mutex_SystemInit(){
static std::once_flag flag;
std::once_call(flag,SystemInit);
};
/*
在初始化函数的调用中,防止初始化被多次调用,加个限定只允许初始化一次
*/
#include <iostream>
#include <mutex>
#include <thread>
#include <Windows.h>
using namespace std;
void SystemInit() {
cout << "System Init!!" << endl;
};
void mutex_SystemInit() {
static std::once_flag flag;
std::call_once(flag, SystemInit);
std::cout << this_thread::get_id() << endl;
}
int main() {
mutex_SystemInit();
//三个线程池
for (int i = 0; i < 3; i++) {
thread th(mutex_SystemInit);
th.detach();
}
Sleep(3000);
return 0;
}