c++多线程锁机制thread和mutex智能指针管理内存unique_ptr
2025-02-09 19:13阅读:
没事干,不愿焦虑也嘎嘎
清理清理电脑。
————————————————————————
不大想讲啥,
人物学习的意义是开拓时代,
普通人是跟上时代,呵呵
不学习哒哒 估计连普通人 都让人能算不上啦

————————————————————————
没啥想说的,
小时候很多都是被赶着学习呵呵
大了嘎嘎 无聊如果嘎嘎,然学会习也没啥不好的
然又有多少抱怨ai会代替很多人很多岗位,然貌似不学习,没机会让ai代替嘎嘎
估计学习是让人解决问题的捷径吧
玩一天视频, 貌似也挺累的嘎嘎
————————
英语 如果不好的话,基本上时代会和代码相关的行业无缘啦嘎嘎,5元前的搬搬砖那算没讲
英语 如果不好的话,基本上 会和大部分的外勤、高新、或者身份行业无缘啦嘎嘎
搞笑得很
————————
瓜子,洽洽这种相对贵的,15元附近一斤吧算,确实几乎没有一个种子是坏的
市面上普通的8元附近也7元?,确实每一把几乎都有个坏的种子吧,
小时候记得二三十年前家里零卖的应该是5元一斤?10年前应该,是7元一斤,反正都是普通的散瓜籽。
好奇怪,很多东西都翻了很多倍,瓜籽好像没涨价!!!!
关键是好像问题不在没涨价,应该是说10年前7元一斤那瓜子价格挺高的!!怪怪的。
烟吧零售小时候一盒应该1元-2元好点的才5元?---应该是后来时长不知道了,大概一下才飞涨20 附近起价?
酱油吧 好像才卖2毛钱-5毛钱1元的逐步每斤,后来才到了5元一瓶海天的?,
这都涨幅倒是大大的,真 搞笑!!!!
瓜子倒是不能乱客,耽误事还容易嗓子上火倒是嘴巴都会几天干巴巴的不合适
—————————————————————————
—————————

完整的deepseek:
#include #include #include #include #include #include // 车辆维修类
class VehicleMaintenance { public: VehicleMaintenance(const
std::string& vehicleName) : name(vehicleName) {} void repair()
{ std::lock_guard lock(mtx); // 确保线程安全 std::cout <<
'Repairing ' << name << '...' << std::endl; //
模拟维修时间 std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << name << ' repaired.' << std::endl; }
private: std::string name; static std::mutex mtx; // 静态互斥锁,确保输出线程安全
}; // 初始化静态互斥锁 std::mutex VehicleMaintenance::mtx; // 维修引擎类 class
MaintenanceEngine { public: void addVehicle(VehicleMaintenance*
vehicle) { vehicles.push_back(vehicle); } void startRepairs() { //
创建线程向量,用于存储线程对象 std::vector threads; // 启动线程,对每个车辆进行维修 for (auto*
vehicle : vehicles) {
threads.emplace_back(&VehicleMaintenance::repair, vehicle); }
// 等待所有线程完成 for (auto& thread : threads) { if
(thread.joinable()) { thread.join(); } } } private: std::vector
vehicles; // 存储车辆维修对象的指针 }; int main() { // 创建维修引擎
MaintenanceEngine engine; // 创建三个车辆维修对象 VehicleMaintenance*
vehicle1 = new VehicleMaintenance('Vehicle 1'); VehicleMaintenance*
vehicle2 = new VehicleMaintenance('Vehicle 2'); VehicleMaintenance*
vehicle3 = new VehicleMaintenance('Vehicle 3'); // 添加车辆到维修引擎
engine.addVehicle(vehicle1); engine.addVehicle(vehicle2);
engine.addVehicle(vehicle3); // 启动维修任务 engine.startRepairs(); //
释放内存 delete vehicle1; delete vehicle2; delete vehicle3; std::cout
<< ' wanbi.' << std::endl; return 0; }
你的代码实现了一个多线程的车辆维修系统,使用了C++的
std::thread和
std::mutex来确保线程安全。代码结构清晰,逻辑正确,但有一些地方可以进一步优化和改进。以下是一些建议:
1. 使用智能指针管理内存
你使用了
new来动态分配内存,但没有使用智能指针来管理这些资源。使用
std::unique_ptr或
std::shared_ptr可以避免手动管理内存,减少内存泄漏的风险。
2. 避免不必要的静态成员
std::mutex在
VehicleMaintenance类中被声明为静态成员,这意味着所有
VehicleMaintenance对象共享同一个互斥锁。如果每个车辆的维修操作是独立的,可以考虑将互斥锁作为实例成员,或者使用局部互斥锁。
3. 使用std::async替代std::thread
std::async可以更方便地管理异步任务,并且可以自动处理线程的创建和销毁。它还可以返回
std::future对象,方便获取任务的执行结果。
4. 代码风格和可读性
- 在
main函数中,std::cout << ' wanbi.'
<< std::endl;这行代码中的空格可以去掉,保持代码整洁。
- 可以在
repair方法中添加更多的日志信息,以便更好地跟踪维修过程。
改进后的代码示例
cpp
复制
#include
#include
#include
#include
#include
#include
#include
#include //
车辆维修类 class VehicleMaintenance
{ public:
VehicleMaintenance(const
std
::string
&
vehicleName
) :
name(vehicleName
)
{} void
repair() {
std
::lock_guard
<</span>std::mutex>
lock(mtx);
// 确保线程安全 std::cout <<
'Repairing ' << name
<< '...' <<
std::endl; // 模拟维修时间
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << name
<< ' repaired.'
<< std::endl;
} private:
std::string name; std::mutex
mtx; // 互斥锁,确保输出线程安全
}; // 维修引擎类
class MaintenanceEngine {
public: void
addVehicle(std::unique_ptr<</span>VehicleMaintenance>
vehicle) {
vehicles.push_back(std::move(vehicle));
} void
startRepairs()
{ // 创建future向量,用于存储异步任务
std::vector<</span>std::future<</span>void>>
futures; // 启动异步任务,对每个车辆进行维修
for (const
auto& vehicle :
vehicles) {
futures.push_back(std::async(std::launch::async,
&VehicleMaintenance::repair,
vehicle.get()));
} // 等待所有异步任务完成 for
(auto& future
: futures) {
future.wait();
} } private:
std::vector<</span>std::unique_ptr<</span>VehicleMaintenance>>
vehicles; // 存储车辆维修对象的智能指针
}; int
main() {
// 创建维修引擎 MaintenanceEngine engine;
// 创建三个车辆维修对象
engine.addVehicle(std::make_unique<</span>VehicleMaintenance>('Vehicle
1'));
engine.addVehicle(std::make_unique<</span>VehicleMaintenance>('Vehicle
2'));
engine.addVehicle(std::make_unique<</span>VehicleMaintenance>('Vehicle
3')); //
启动维修任务
engine.startRepairs();
std::cout << 'wanbi.'
<< std::endl;
return 0;
}
主要改进点:
-
智能指针管理内存:使用
std::unique_ptr来管理VehicleMaintenance对象,避免手动delete。
-
使用
std::async:替代std::thread,简化线程管理。
- 移除静态互斥锁:将互斥锁作为实例成员,避免不必要的全局锁。
这些改进使代码更加现代化、安全且易于维护。