C++高频知识点(十四)

文章目录

  • [66. 程序什么时候应该使用多线程,什么时候单线程效率高?](#66. 程序什么时候应该使用多线程,什么时候单线程效率高?)
  • [67. 死锁的原因和避免](#67. 死锁的原因和避免)
  • [68. TCP拥塞控制](#68. TCP拥塞控制)
  • [69. C++的内存管理](#69. C++的内存管理)
  • [70. 构造函数可以是虚函数吗,析构函数呢](#70. 构造函数可以是虚函数吗,析构函数呢)

66. 程序什么时候应该使用多线程,什么时候单线程效率高?


67. 死锁的原因和避免


死锁的避免

预防死锁:破坏持有并等待条件

cpp 复制代码
#include <iostream>
#include <thread>
#include <mutex>

std::mutex mutex1;
std::mutex mutex2;

void thread1() {
    while (true) {
        std::lock_guard<std::mutex> lock1(mutex1); // 持有资源1
        std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟一些工作
        std::lock_guard<std::mutex> lock2(mutex2); // 持有资源2
        // 执行临界区代码
        std::cout << "Thread 1 working..." << std::endl;
    }
}

void thread2() {
    while (true) {
        std::lock_guard<std::mutex> lock2(mutex2); // 持有资源2
        std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟一些工作
        std::lock_guard<std::mutex> lock1(mutex1); // 持有资源1
        // 执行临界区代码
        std::cout << "Thread 2 working..." << std::endl;
    }
}

int main() {
    std::thread t1(thread1);
    std::thread t2(thread2);

    t1.join();
    t2.join();

    return 0;
}

在这个示例中,线程1和线程2分别以相反的顺序获取两个互斥锁,容易导致死锁。为了避免死锁,可以修改代码,使线程在获取资源时遵循相同的顺序。


68. TCP拥塞控制

TCP拥塞控制是为了防止网络过载和拥塞而采取的一系列机制和算法。TCP拥塞控制的目标是高效地使用网络资源,同时避免网络拥塞导致的数据丢失和传输延迟。

TCP拥塞控制主要包括四个关键算法:慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)





四个阶段轮换过程描述






69. C++的内存管理

C++的内存管理涉及多个方面,包括栈内存和堆内存的分配与管理、对象的生命周期管理、以及避免和处理内存泄漏

RAII (Resource Acquisition Is Initialization),中文含义为『资源获取即初始化』,是C++中一种非常重要的资源管理技术。

70. 构造函数可以是虚函数吗,析构函数呢

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
weilx12341 天前
C++笔记-文件IO-<fcntl.h>
c++
上海广测检测科技有限公司1 天前
智能平板出口巴西合规详解:Anatel射频、Inmetro电源/电池与LGPD数据合规叠加
经验分享
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
FLJwu1 天前
存储与固件量产实战01:运动相机TF卡量产翻车实录!V30≠4K可用,90%OEM踩中的隐形售后坑
经验分享·数码相机·相机
Smileyqp沛沛1 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控