C++高频知识点(十四)
文章目录
- 66. 程序什么时候应该使用多线程,什么时候单线程效率高?
- 67. 死锁的原因和避免
- 死锁的避免
- 预防死锁:破坏持有并等待条件
- 68. TCP拥塞控制
- 四个阶段轮换过程描述
- 69. C++的内存管理
- 70. 构造函数可以是虚函数吗,析构函数呢
66. 程序什么时候应该使用多线程,什么时候单线程效率高?
67. 死锁的原因和避免
死锁的避免
预防死锁:破坏持有并等待条件
#include <iostream>
#include <thread>
#include <mutex>std::mutex mutex1;
std::mutex mutex2;void thread1() {while (true) {std::lock_guard<std::mutex> lock1(mutex1); // 持有资源1std::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); // 持有资源2std::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. 构造函数可以是虚函数吗,析构函数呢
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!