采用匿名函数(lamda表达式)创建线程,并进行常规的多线程性能测试方法模板

采用匿名函数(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变量
//}
//*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值