文章目錄
- 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. 構造函數可以是虛函數嗎,析構函數呢
之后我會持續更新,如果喜歡我的文章,請記得一鍵三連哦,點贊關注收藏,你的每一個贊每一份關注每一次收藏都將是我前進路上的無限動力 !!!↖(▔▽▔)↗感謝支持!