if (m_db_cur_conn_cnt >= m_db_max_conn_cnt) { // 如果已经到达了,看看是否需要超时等待 if(timeout_ms <= 0) // 死等,直到有连接可以用 或者 连接池要退出 { log_info("wait ms:%d ", timeout_ms); m_cond_var.wait(lock, [this] { // log_info("wait:%d, size:%d ", wait_cout++, m_free_list.size()); // 当前连接数量小于最大连接数量 或者请求释放连接池时退出 return (!m_free_list.empty()) | m_abort_request; }); } else { // return如果返回 false,继续wait(或者超时), 如果返回true退出wait // 1.m_free_list不为空 // 2.超时退出 // 3. m_abort_request被置为true,要释放整个连接池 m_cond_var.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this] { // log_info("wait_for:%d, size:%d ", wait_cout++, m_free_list.size()); return (!m_free_list.empty()) | m_abort_request; }); // 带超时功能时还要判断是否为空 if(m_free_list.empty()) // 如果连接池还是没有空闲则退出 { return NULL; } } if(m_abort_request) { log_warn("have aboort "); return NULL; } } else // 还没有到最大连接则创建连接 { CDBConn *pDBConn = new CDBConn(this); //新建连接 int ret = pDBConn->Init(); if (ret) { log_error("Init DBConnecton failed "); delete pDBConn; return NULL; } else { m_free_list.push_back(pDBConn); m_db_cur_conn_cnt++; // log_info("new db connection: %s, conn_cnt: %d ", m_pool_name.c_str(), m_db_cur_conn_cnt); } }今天的文章 2025年c++ 条件变量和读写锁(c++11 条件变量wait函数)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5172.html