新浪博客

c++多线程锁机制thread和mutex智能指针管理内存unique_ptr

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

c++多线程锁机制thread和mutex智能指针管理内存unique_ptr
完整的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::threadstd::mutex来确保线程安全。代码结构清晰,逻辑正确,但有一些地方可以进一步优化和改进。以下是一些建议:

1. 使用智能指针管理内存

你使用了new来动态分配内存,但没有使用智能指针来管理这些资源。使用std::unique_ptrstd::shared_ptr可以避免手动管理内存,减少内存泄漏的风险。

2. 避免不必要的静态成员

std::mutexVehicleMaintenance类中被声明为静态成员,这意味着所有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; }

主要改进点:

  1. 智能指针管理内存:使用std::unique_ptr来管理VehicleMaintenance对象,避免手动delete
  2. 使用std::async:替代std::thread,简化线程管理。
  3. 移除静态互斥锁:将互斥锁作为实例成员,避免不必要的全局锁。
这些改进使代码更加现代化、安全且易于维护。

我的更多文章

下载客户端阅读体验更佳

APP专享