采用匿名函数(lamda表达式)创建线程,并进行常规的多线程性能测试方法模板
创建线程:
//方法一:
std::thread* threadOne = new std::thread([&](ServerInfo &ServerInfoT){
SipServer sipServer(&ServerInfoT);
sipServer.loop();
},std::ref(info));
//方法二:
std::thread* threadOne = new std::thread([&](ServerInfo ServerInfoT){
SipServer sipServer(&ServerInfoT);
sipServer.loop();
},info);
lamda表达式:
捕捉列表描述了上下文中那些数据可以被lambda使用,以及使用的方式传值还是传引用。
- [var]:表示值传递方式捕捉变量var
- [=]:表示值传递方式捕获所有父作用域中的变量(包括this)
- [&var]:表示引用传递捕捉变量var
- [&]:表示引用传递捕捉所有父作用域中的变量(包括this)
- [this]:表示值传递方式捕捉当前的this指针
多线程测试性能,复现程序崩溃 案例模板
/**
* @brief 创建一个用例对bool_t JsonObject::Parse(const std::string& strJson) 函数进行调用
*
* 旧版cJSON造成进程崩溃的测试复现
*
* @param pert
* @param 2023年11月7日11:39:48
*/
#include <iostream>
#include "JsonObject.h" // Assuming JsonObject header file is included
#include <vector>
#include <thread>
int main() {
std::string json = "{\"key—¥、/n\r\n/_-- keyend\":\"John\",\"age\":30,\"city\":\"New York\"}";
/* JsonObject jsonObject;
bool_t result = jsonObject.Parse(json);*/
std::vector<std::thread*>threads;
for (size_t i = 0; i < 130; i++) {//计算机处理器12个
std::thread* threadOne = new std::thread([&](uint32_t times){
JsonObject jsonObject;
for (size_t times = 0; times < 1000; times++) {
try {
bool_t result = jsonObject.Parse(json);//旧版本cJson造成程序进程崩溃点:访问一个全局静态指针。见最下方
}
catch (...) {//捕获所有异常
//捕获不到崩溃
std::cout << "JSON parsing failed!" << std::endl;
}
}
},i);
threads.emplace_back(threadOne);
}
for (auto &thread: threads) {
thread->join();//线程同步
}
return 0;
}
///* remove global variable for thread safe. --by Bwar on 2020-11-15
//static const char *ep;
//
//const char *cJSON_GetErrorPtr()
//{
//return ep;//多处操作ep变量
//}
//*/